我有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 });
});
});
};
答案 0 :(得分:3)
如果您这样做的唯一原因是为了避免重复代码,那么我认为这是一个坏主意。看着你的代码的人(或者你在一年内查看你的代码)并不自然地期望数据库连接是req
的属性。你并没有真正省去任何麻烦。
只需require()
文件中的数据库池并使用它。
<强> commentController.js 强>
const db = require('./db');
require()
会将同一个池返回给您的所有模块。
还不清楚为什么要请求连接而不是使用池(我对你正在使用的lib做了一些假设)。
通常你应该能够:
const db = require('./db');
exports.showComments = (req, res) => {
db.query(`SELECT * FROM comments`, (error, results, fields) => {
if (err) throw err;
res.render('comments', { results });
});
});
这样可以省去请求和返回连接的麻烦,只需让池可以正常工作。