Restify:在中间件中调用中间件

时间:2016-01-23 22:56:29

标签: node.js express restify

我有一个用于身份验证的中间件,用于解密标头中的令牌并将userId从令牌放到req.userId。否则,如果令牌不存在或无效,则会引发错误。

我在需要身份验证的路由中这样称呼它:

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

现在我还有一些路径会在其参数中包含用户ID,如下所示:

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

此处:userId可以是Mongoose对象ID,也可以是me

所以我想编写另一个中间件,它将针对寻找特定params的所有路由进行调用,例如userId和/或adminId。如果它们的值等于me,我想确保authMiddleware自动执行,PLUS用登录用户的ID替换me,以便callService.somecall处理逻辑在内部收到Mongoose对象ID。

我面临两个问题:

  • 如何在req.params.userId之前调用的中间件中获取server.get(...)
  • 假如我以某种方式得到req.params.userId,我该如何制作中间件:
    • 执行某些条件(检查req.params.userId === 'me'),
    • 然后致电authMiddleware,以便从令牌获得req.userId
    • 然后执行更多操作(替换req.params.userId = req.userId
    • 然后致电next()继续。

1 个答案:

答案 0 :(得分: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();
}