我有一个用于身份验证的中间件,用于解密标头中的令牌并将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()
继续。答案 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();
}