Работа с Express и SQLite (подключение и отключение) Node.js - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть вопрос об интеграции SQLite (но в целом БД) с Node.js с и Express Framework.

Из того, что я знаю, всегда хорошо открывать и закрывать соединениев БД.Но в Node.js процессы асинхронны (иногда).

router.get("/", (req, res) => {
  let db = new sqlLite.Database(path.resolve("data.db"), (err) => {
   if (err) {
    console.error(err.message);
   }
   console.log("Connected to the chinook database.");
  });
  db.get(`SELECT * FROM data WHERE key = '${req.query.data}'`, (err, row) => {
   res.json(row);
  });
  db.close((err) => {
   if (err) {
    console.error(err.message);
   }
  console.log("Close the database connection.");
 });
});

В этом примере я открываю и закрываю соединение непосредственно в маршруте, так что в этом случае оно обрабатывает только событие.Правильный ли этот подход?что порекомендуете?

1 Ответ

0 голосов
/ 14 декабря 2018

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

Тем не менее, две вещи, которые будут иметь значение.Во-первых, вам действительно нужно закрыть соединение во время обратного вызова, а не после вызова запроса:

router.get("/", (req, res) => {
  let db = new sqlLite.Database(path.resolve("data.db"), (err) => {
   if (err) {
    console.error(err.message);
   }
   console.log("Connected to the chinook database.");
  });
  db.get(`SELECT * FROM data WHERE key = '${req.query.data}'`, (err, row) => {
   db.close((err) => {
     if (err) {
      console.error(err.message);
     }
     console.log("Close the database connection.");
   });
   res.json(row);
  });
});

Во-вторых, хотя строки шаблона и не связаны с вашим вопросом, они не безопасны от атак SQL-инъекций.Таким образом, вам действительно не следует брать прямой пользовательский ввод из req.body или req.query или аналогичного и объединять его с вашим запросом, если вы не уверены, что злонамеренный пользователь уничтожает вашу БД.

Чтобы избежать проблемы внедрения, рекомендуется проверить, что пользовательский ввод попадает в допустимый диапазон значений, а также использовать подготовленные операторы для правильного экранирования потенциально вредоносных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...