Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJs当next()方法上的标记正确时会发生什么?_Javascript_Node.js - Fatal编程技术网

Javascript NodeJs当next()方法上的标记正确时会发生什么?

Javascript NodeJs当next()方法上的标记正确时会发生什么?,javascript,node.js,Javascript,Node.js,我是使用JSON Web令牌验证Node.js API的新手,我在scotch.io上读过,但我不明白令牌什么时候正确,下一步()方法之后会发生什么 用户必须在此之后通过其他请求(我的意思是在令牌正确之后) 我认为在这个示例中,代码/路由将在检查令牌后调用,它是正确的,好吗?我如何选择调用其他方法,因为/在next()之后调用。实际上next()要求nodejs继续执行下一步,这是node.js异步循环中的任何内容。Javascript实际上是单线程的,所以下一步将调用堆栈中放置的任何方法。如果

我是使用JSON Web令牌验证Node.js API的新手,我在scotch.io上读过,但我不明白令牌什么时候正确,下一步()方法之后会发生什么

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

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

实际上next()要求nodejs继续执行下一步,这是node.js异步循环中的任何内容。Javascript实际上是单线程的,所以下一步将调用堆栈中放置的任何方法。如果不调用next(),程序将被卡住。并且不会在传递给
的令牌中间件之后调用任何其他方法。请使用

在这个特定的场景中,它将在这个令牌中间件验证后调用下一个路由,您将把它作为匿名函数传递

也看看这个方法

我认为在这个示例代码中,
/
路由将在检查令牌后调用,并且它是正确的,好吗?如何选择要调用的其他方法,因为
/
是在
next()之后调用的。
它不必调用/route。用户执行并使用apiRouter的每个方法都将通过该中间件。它可以是//users/任何东西等等。那么这只是中间件,对于自动调用的每个请求,它是否正确?在那之后通过的方法可能有点不对劲。你也可以通过任何数量的中间产品。
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);