使用Express和SQLite(连接和断开连接)Node.js

时间:2018-12-14 16:20:34

标签: javascript node.js sqlite

我对将SQLite(但通常是数据库)与Node.js和Express框架集成在一起有疑问。

据我所知,打开和关闭与数据库的连接总是好的。但是在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 :(得分:0)

在大多数情况下,更好的方法是使用某种连接池,但是取决于您的应用程序可能无关紧要。

也就是说,有两件事很重要。首先,您确实需要在回调过程中而不是在查询调用之后关闭连接:

// []

第二个(尽管与您的问题无关)是模板字符串对于SQL注入攻击而言是安全的。因此,除非您对恶意用户销毁数据库感到满意,否则您实际上不应该从req.body或req.query或类似内容中获取直接用户输入,并将其与查询连接起来。

为避免注入问题,最好既验证用户输入是否在可接受的值范围内,又使用prepared statements适当地逃避潜在的恶意值。