【问题标题】:Restify: Calling a middleware within a middlewareRestify:在中间件中调用中间件
【发布时间】:2016-01-26 12:40:42
【问题描述】:

我有一个用于身份验证的中间件,它解密标头中的令牌并将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 自动生效,并将me 替换为登录用户的ID,以便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()继续。

【问题讨论】:

    标签: node.js express restify


    【解决方案1】:

    您的问题有点令人困惑,所以我不知道这是否会有所帮助,但为什么不这样做:

    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();
    }
    

    【讨论】:

    • 谢谢,我实际上修改了authMiddleware 并在其中做了params 的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多