作为一个非Node背景的人,我的第一反应是这样定义我的服务
MyService.js
module.exports = new function(dbConnection)
{
// service uses the db
}
现在,我希望每个请求都有一个开放的数据库连接,所以我在中间件中定义了以下内容:
res.locals.db = openDbConnection();
在一些消费Express api的代码中:
api.js
var MyService = require(./services/MyService')
...
router.get('/foo/:id?', function (req, res) {
var service = new MyService(res.locals.db);
});
现在,由于Node的首选依赖注入方法是通过
require(...)
语句进行的,因此似乎我不应该使用MyService
的构造函数来注入db
。
那么假设我想要拥有
var db = require('db');
在MyService
的顶部,然后以某种方式使用db.current
....但是现在db
本身是一个模块,我该如何将db与当前的res.locals
对象绑定起来?在Node中处理这种情况有什么推荐的方法吗?