在NodeJS的所有请求中包含我的连接是否可以?

我有3个文件。 db.jsapp.jscommentController.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 }); }); }); 

这节省了请求和返回连接的麻烦,只是让池做它的工作。