В большинстве случаев лучшим подходом является использование какого-либо пула соединений, но в зависимости от вашего приложения это может иметь или не иметь значения.
Тем не менее, две вещи, которые будут иметь значение.Во-первых, вам действительно нужно закрыть соединение во время обратного вызова, а не после вызова запроса:
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 или аналогичного и объединять его с вашим запросом, если вы не уверены, что злонамеренный пользователь уничтожает вашу БД.
Чтобы избежать проблемы внедрения, рекомендуется проверить, что пользовательский ввод попадает в допустимый диапазон значений, а также использовать подготовленные операторы для правильного экранирования потенциально вредоносных значений.