October 24, 2023

Маршрутизация

Я могу помочь вам создать сервер с маршрутизатором на Node.js, используя функцию для преобразования имени страницы и алиаса из базы SQLite. Вот пример, который поможет вам начать:

Шаг 1: Установка зависимостей
Перейдите в папку вашего проекта и выполните следующую команду, чтобы установить необходимые зависимости (это потребует наличия установленного Node.js и npm):

npm install express sqlite3

Шаг 2: Подключение к базе данных SQLite
Создайте новый файл database.js и добавьте следующий код для подключения к базе данных SQLite и выполнения запросов:

const sqlite3 = require('sqlite3').verbose();

// Подключение к базе данных
const db = new sqlite3.Database('your_database.sqlite');

// Функция для выполнения SQL-запросов
function runQuery(query, params) {
  return new Promise((resolve, reject) => {
    db.run(query, params, function (err) {
      if (err) {
        reject(err);
        return;
      }
      resolve(this);
    });
  });
}

module.exports = {
  db,
  runQuery
};

Шаг 3: Создание маршрутизатора
В файле index.js (или другом файле, который вы выбрали) добавьте следующий код для создания сервера и маршрутизатора:

const express = require('express');
const { db, runQuery } = require('./database');

const app = express();

// Маршрутизатор
app.get('/:alias', async (req, res) => {
  const alias = req.params.alias;
  try {
    const query = 'SELECT page FROM pages WHERE alias = ?';
    const rows = await runQuery(query, [alias]);

    if (rows.length > 0) {
      const page = rows[0].page;
      res.send(`Страница: ${page}`);
    } else {
      res.send(`Страница не найдена`);
    }
  } catch (err) {
    console.error(err);
    res.status(500).send('Ошибка сервера');
  }
});

// Запуск сервера
app.listen(3000, () => {
  console.log('Сервер запущен на порту 3000');
});

Это базовый пример. Вы можете настроить базу данных SQLite, создать таблицу pages с полями alias и page, добавить страницы в базу данных и настроить другие маршруты по вашему усмотрению.

Шаг 4: Запуск сервера
В командной строке перейдите в папку вашего проекта и выполните следующую команду для запуска сервера:

node index.js

Сервер будет слушать на порту 3000. Вы можете открыть веб-браузер и перейти по адресу http://localhost:3000/{alias}, где {alias} - это алиас страницы, который вы хотите преобразовать из базы данных SQLite.

Это лишь пример реализации сервера с маршрутизатором на Node.js, используя базу данных SQLite. Вы можете доработать этот код и добавить другие функции в зависимости от ваших потребностей.

вот доработанный пример кода с добавлением безопасного выключения сервера и проверок безопасности для запросов и ответов:

const express = require('express');
const { db, runQuery } = require('./database');

const app = express();
const server = require('http').createServer(app);

// Маршрутизатор
app.get('/:alias', async (req, res) => {
  try {
    const alias = req.params.alias;
    if (!isValidAlias(alias)) {
      // Проверка безопасности: Проверить, соответствует ли алиас допустимым символам
      res.status(400).send('Некорректный алиас');
      return;
    }

    const query = 'SELECT page FROM pages WHERE alias = ?';
    const rows = await runQuery(query, [alias]);

    if (rows.length > 0) {
      const page = rows[0].page;
      res.send(`Страница: ${page}`);
    } else {
      res.send(`Страница не найдена`);
    }
  } catch (err) {
    console.error(err);
    res.status(500).send('Ошибка сервера');
  }
});

// Функция для проверки безопасности алиаса
function isValidAlias(alias) {
  const regex = /^[a-zA-Z0-9_-]+$/; // Разрешены алфавитно-цифровые символы, дефис и подчеркивание
  return regex.test(alias);
}

// Запуск сервера
const PORT = 3000;
server.listen(PORT, () => {
  console.log(`Сервер запущен на порту ${PORT}`);
});

// Обработка безопасного выключения сервера из консоли
process.on('SIGINT', () => {
  console.log('Выключение сервера...');
  server.close(() => {
    console.log('Сервер успешно выключен');
    process.exit(0);
  });
});

В этой версии кода были добавлены следующие изменения:

Функция isValidAlias была добавлена для проверки безопасности алиаса. Она использует регулярное выражение, чтобы убедиться, что алиас состоит только из разрешенных символов (алфавитно-цифровые символы, дефис и подчеркивание).

В обработчике маршрута была добавлена проверка безопасности алиаса перед выполнением запроса. Если алиас не проходит проверку, сервер отправит ответ со статусом 400 ("Некорректный алиас").

Добавлен обработчик события SIGINT для безопасного выключения сервера из консоли. При получении сигнала SIGINT сервер будет закрываться и только после этого процесс будет завершаться.

Обратите внимание, что это лишь базовые проверки безопасности, которые могут быть дополнены и расширены в зависимости от ваших конкретных требований и сценариев использования. Важно знать, что безопасность веб-приложений - это более сложная и всесторонняя тема, требующая учета множества факторов и проверок.

Другие вопросы безопасности