2016-01-23 34 views
0

我有一個認證中間件,用於解密標頭中的令牌,並將userId從令牌傳送到req.userId。否則,如果令牌不存在或無效,則會引發錯誤。Restify:調用中間件中的中間件

我這樣稱呼它在我需要的認證路線:

server.get('/api/somecall', authMiddleware, callService.somecall); 

現在我也會有一定的路線,將其params攜帶的用戶ID,像這樣:

server.get('/api/somecall/:userId', callService.somecall); 

這裏:userId可以是一個Mongoose對象ID或者只是me

所以我想寫另一箇中間件,它將被稱爲所有路線,尋找特定的paramsuserId和/或adminId。如果它們的值等於me,我想確保authMiddleware自動起作用,PLUS用登錄的用戶ID替換me,以便callService.somecall在收到Mongoose對象ID時處理其內部的邏輯。

有兩個問題我面對:

  • 我如何在這之前server.get(...)稱爲中間件req.params.userId
  • 假設,如果我得到req.params.userId不知何故,如何讓我的中間件:
    • 執行一些條件(檢查是否req.params.userId === 'me'
    • 然後調用authMiddleware讓我得到req.userId從令牌,並
    • 然後執行多個動作(更換req.params.userId = req.userId
    • 然後調用next()繼續。

回答

0

你的問題是有點混亂,所以我不知道這是否會幫助,但爲什麼不能做這樣的事情:

server.get('/api/somecall/:userId', otherMiddleware, callService.somecall); 

function otherMiddleware(req, res, next){ 
    if(req.params.userId === 'me'){ 
     authMiddleware(req, res, next); 
    } 

    // Do other stuff here. 

    next(); 
} 
+0

謝謝,其實我修改了'authMiddleware',也做了'PARAMS '它裏面的東西。 –