NodeJs在next()方法上Token正确时会发生什么?

时间:2016-08-05 08:03:22

标签: javascript node.js

我是使用使用JSON Web令牌验证Node.js API的新手,我在scotch.io上阅读this document但是我无法理解Token是否正确next()方法之后发生的事情

apiRoutes.use(function(req, res, next) {

    // check header or url parameters or post parameters for token
    var token = req.body.token || req.param('token') || req.headers['x-access-token'];

    // decode token
    if (token) {
        // verifies secret and checks exp
        jwt.verify(token, app.get('superSecret'), function(err, decoded) {          
            if (err) {
                return res.json({ success: false, message: 'Failed to authenticate token.' });      
            } else {
                // if everything is good, save to request for use in other routes
                req.decoded = decoded;  
                next();
            }
        });

    } else {
        ...
    }

});

apiRoutes.get('/', function(req, res) {
    ...
});

apiRoutes.get('/users', function(req, res) {
    ...
});

apiRoutes.get('/check', function(req, res) {
    ...
});

app.use('/api', apiRoutes);

app.listen(port);

用户必须在此之后传递其他请求(我的意思是在令牌正确后)?

我认为在这个示例代码/路由将在检查令牌后调用它是正确的,好吗?我怎样才能选择其他方法来调用,因为/是在next()之后调用

1 个答案:

答案 0 :(得分:1)

实际上next()要求nodejs继续下一步它是node.js异步循环中的任何东西。 Javascript实际上是单线程的,所以接下来会调用放在堆栈的任何方法。如果你不打电话给next()你的程序会卡住。并且在您传递给.use

的令牌中间件之后不会调用任何其他方法

在这种特殊情况下,它将通过此​​令牌中间件验证后调用下一个路由,您将作为匿名函数传递。

也看看这个方法 javascript node.js next()