繁体   English   中英

nodejs Express framework此关键字

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM