更新された回答:05/02/15
各リクエストオブジェクトにDB接続をアタッチし、サービスでその接続を使用する場合は、接続をmyService
に渡す必要があります。 何とかして。以下の例は、それを行う1つの方法を示しています。 db.current
を使おうとすると またはその趣旨で、DBモジュールに状態を保存します。私の経験では、それはトラブルにつながります。
または、この前の回答 。この例でこれが意味することは次のとおりです。
// api.js
var MyService = require(./services/MyService')
...
router.get('/foo/:id?', function (req, res) {
MyService.performTask(req.params.id);
});
// MyService.js
var db = require('db');
module.exports = {
performTask: function(id)
{
var connection = db.getOpenConnection();
// Do whatever you want with the connection.
}
}
このアプローチでは、DBモジュールをapi / app / routerモジュールから切り離し、実際にそれを使用するモジュールのみがDBモジュールが存在することを認識します。
前の回答:2015年5月1日
あなたが話していることは、エクスプレスミドルウェアを使用して行うことができます。表示される内容は次のとおりです。
var db = require('db');
// Attach a DB connection to each request coming in
router.use(req, res, next){
req.locals.db = db.getOpenConnection();
next();
}
// Later on..
router.get('/foo/:id?', function (req, res) {
// We should now have something attached to res.locals.db!
var service = new MyService(res.locals.db);
});
私は個人的にnew MyService
のようなものを見たことがありません エクスプレスアプリケーションの前に。それができないという意味ではありませんが、このようなアプローチを検討するかもしれません
// router.js
var MyService = require('MyService');
router.get('/foo/:id?', function (req, res) {
MyService.foo(res.locals.db);
});
// MyService.js
module.exports.foo(connection){
// I have a connection!
}