1
我有3個文件。 db.js
,app.js
,commentController.js
。 我在我的應用程序的每個請求中包含了我的連接,所以我不會一次又一次地重複代碼連接。這是一種糟糕/不安全的做法嗎?有沒有更好的/正確的方法來實現這一點?可以在NodeJS的所有請求中包含我的連接嗎?
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 });
});
});
};
爲什麼'commentController.js'''不需要'池直接?某種形式的DI?但我認爲有更好的方法去做DI ...... –
如果你打算嘲笑數據庫接口進行測試,我可以看到一些好處,但這是一個很好的選擇,還有更好的方法。我會直接要求池,因爲TJ Crowder建議 – slezica
你所做的主要問題是它「隱藏」了一個依賴項,使得你的路由文件不能重用。而且,由於'db.pool'實際上並不涉及'req'對象,所以沒有合法的編程原因應該將其存儲在那裏。正如Mark在他的回答中所說的那樣,只需要在任何需要它的模塊中的db模塊中使用require()。這直接在您的代碼中聲明依賴關係,這是對節點文件執行操作的方式。是的,它似乎是每個路徑文件中的一個重複的代碼,但這就是如何明確依賴關係並且是在節點文件中執行操作的方式。 – jfriend00