javascript - 可以在 NodeJS 的所有请求中包含我的连接吗?

标签 javascript node.js express

我有 3 个文件。 db.js, app.js, commentController.js。 我在我的应用程序的每个请求中都包含了我的连接,这样我就不会一次又一次地重复代码连接。这是一种不好的/不安全的做法吗?有没有更好/正确的方法来实现它?

db.js

const mysql = require('mysql');

const pool = mysql.createPool({
    host     : 'host',
    user     : 'user',
    password : 'password',
    database : 'dbname'
});

exports.pool = pool;

app.js

const db = require('./db');

app.use((req, res, next) => {
  req.pool = db.pool;
  next();
});

commentController.js

exports.showComments = (req, res) => {
  req.pool.getConnection((err, conn) => {
    conn.query(`SELECT * FROM comments`, (err, results, fields) => {
      conn.release();
      if (err) throw err;

      res.render('comments', { results });
    });
  });
};

最佳答案

如果您这样做的唯一原因是避免重复代码,那么我认为这是个坏主意。查看您的代码的人(或者您一年后查看您的代码)自然不会期望数据库连接是 req 的属性。而且你真的没有给自己省任何麻烦。

只需require()文件中的数据库池并使用它。

commentController.js

const db = require('./db');

require() 将向所有模块返回相同的池。

也不清楚您为什么请求连接而不是使用池(我对您使用的库做了一些假设)。

通常你应该能够做到:

const db = require('./db');

exports.showComments = (req, res) => {
    db.query(`SELECT * FROM comments`, (error, results, fields) => {
        if (err) throw err;
        res.render('comments', { results });
    });
});

这省去了请求和返回连接的麻烦,让池完成它的工作。

关于javascript - 可以在 NodeJS 的所有请求中包含我的连接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46568617/

相关文章:

javascript - Javascript 中的 formatMoney 函数不起作用

node.js - 更改后重新处理请求

javascript - 打印 jade 文件中的变量

node.js - 无法在 View 目录中查找 View "index"

javascript - 使用 express.js 和 jade 处理路由和文件

javascript - Bluebird 嵌套 promise 与每个/传播

class - javascript中的变量类名

javascript - 在 XSL 中测试 javascript 输出

javascript - Nodejs迭代后读取数组

javascript - 如何使用强大的 npm 将文件上传到谷歌云