[英]nodejs Express framework this keyword
我的app.js看起来像这样:
var expressJwt = require('express-jwt');
var session = require('redis-sessions');
app.use('/events', expressJwt({secret: secret}), session.verifyToken, events);
session.verifyToken是redis db的自定义模式,用于检查令牌是否已过期。
我为模块编写的所有测试均有效,因此当我从mocha对其进行测试时,session.verifyToken可以正常工作。
//verifyToke function
RedisSessions.prototype.verifyToken = function(req, res, next){
var token = this.extractToken( req.headers['authorization'] );
this.containsToken(token, function(err, contains){
if(contains == 1){
next();
}else{
res.send(401);
}
});
}
最后,我导出我的RedisSession模块,如下所示:
module.exports = new RedisSessions();
但是,当请求通过express传入时,我在这条线上收到500个内部错误。
var token = this.extractToken( req.headers['authorization'] );
关键是, this
关键字的范围已完全关闭,在该范围内应该只有我的RedisSessions对象,而应该是Hole Express框架。
任何人都可以解释为什么关闭此关键字吗?
当您像这样将session.verifyToken
传递给app.use()
,您就是在传递裸函数。 它没有任何绑定的上下文。
以下是解决此问题的两种解决方案:
function verifyToken(req, res, next) {
session.verifyToken(req, res, next);
}
app.use('/events', expressJwt({secret: secret}), verifyToken, events);
要么
app.use('/events', expressJwt({secret: secret}), session.verifyToken.bind(session), events);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.