【发布时间】: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()继续。
- 执行一些条件(检查是否
【问题讨论】: