nodejs Express框架这个关键字

时间:2014-09-02 11:31:09

标签: node.js express node-modules

我的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对象,而是孔快速框架。

任何人都可以解释为什么关闭此关键字?

1 个答案:

答案 0 :(得分:2)

当您将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);