依赖注入Express路由

时间:2015-02-15 16:01:07

标签: node.js express

我需要将db对象注入securityHandler对象,但我似乎无法理解如何操作。

securityHandler.authenticate方法中,我希望有权访问所有人:dbrequestresponse

我试过这个:

app.post('/api/login', securityHandler.authenticate(request, response, db) );

SecurityHandler.prototype.authenticate = function authenticate(request, response, db) {};

修改

nane建议将db对象传递给SecurityHandler的构造函数:

var security = new SecurityHandler(db);

SecurityHandler本身看起来像这样:

function SecurityHandler(db) {
    console.log(db); // Defined
    this.db = db;
}

SecurityHandler.prototype.authenticate = function authenticate(request, response, next) {
    console.log(this.db); // Undefined
};

db对象现在存在于构造函数方法中,但由于某种原因在authenticate方法中无法访问。

2 个答案:

答案 0 :(得分:0)

securityHandler.authenticate(request, response, db)会立即致电authenticate,因为您会将authenticate来电的结果作为回调传递给app.post('/api/login', /*...*/)

你需要这样做:

app.post('/api/login', function(request, response) {
   securityHandler.authenticate(request, response, db) );
});

答案 1 :(得分:-1)

您可以在express.js中编写自定义中间件,并在路由任何请求之前使用它。

有关自定义中间件的更多信息,您可以参考 - Express.js Middleware Demystified

现在,在这个中间件中,您可以实现与所有请求之前触发的身份验证相关的功能,并且您可以根据您的request.url在中间件本身中操作代码。

希望这会对你有所帮助。 谢谢。