私は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'は'直接プールをrequire'ないのですか? DIの形式ですか?しかし、私はあなたがテスト用データベースインタフェースをからかっを計画している場合、私はこれにいくつかの利点を見ることができるDI ... –
を行うためのより良い方法があったと思うだろうが、それはロングショットだとより良い方法があります。 TJ Crowderが示唆しているように私はプールを直接必要とします – slezica
あなたがやっていることの主な問題は、ルートファイルをあまり再利用できなくする依存関係を「隠す」ということです。また、 'db.pool'は実際に' req'オブジェクトに関連していないので、そこに格納されるべき正当なプログラミング上の理由はありません。 Markが答えているように、必要とするモジュールのdbモジュールで 'require()'だけを実行します。これは、ノードファイルを使用する方法であるコードに直接依存することを示します。はい、それは各ルートファイルで少し繰り返されたコードのようですが、それは依存関係を明示的に示していて、ノードファイル内で処理する方法です。 – jfriend00