2016-08-05 53 views
1

我是新手使用與驗證JSON網絡令牌的Node.js的API,我讀this document上scotch.io但是當令牌是正確後next()方法NodeJs令牌在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

實際上next()要求nodejs繼續下一步它是node.js異步循環中的任何內容。 JavaScript實際上是單線程的,所以接下來會調用堆棧中的任何方法。如果你不會再打電話下一步()你的程序將卡住。並且在您傳遞給此令牌中間件之後不會調用任何其他方法.use

在此特定場景中,它將在通過此令牌中間件驗證後調用下一個路由,該令牌中間件將作爲匿名函數傳遞。

也看看這個方法 javascript node.js next()

+0

我想在這個示例代碼'/'路徑被檢查後,叫令牌,它是正確的,好嗎?我怎樣才能選擇其他方法來調用,因爲'/'在'next()'之後調用 –

+0

它不需要調用/路由。用戶執行的每個方法都使用apiRouter將通過這個中間件。它可以是/ /用戶/不管等等。 – owaishanif786

+0

那麼這只是中間件,對於每個自動調用的請求都是正確的?之後通過的方法可能是 –