我有一个用于身份验证的中间件,它对标头中的令牌进行解密,并将userId从令牌放置到req.userId。否则,如果令牌不存在或无效,则引发错误。
在我需要认证的路线上,我这样称呼它:
server.get('/api/somecall', authMiddleware, callService.somecall);现在,我还将有一些在其params中包含用户ID的路由,如下所示:
server.get('/api/somecall/:userId', callService.somecall);这里,:userId可以是Mongoose对象ID,也可以是me。
因此,我想编写另一个中间件,它将被调用到所有寻找特定params (如userId和/或adminId )的路由。如果它们的值等于me,我希望确保authMiddleware自动生效,并将me替换为登录的用户ID,以便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()继续。
发布于 2016-01-26 04:40:42
你的问题有点混乱,所以我不知道这是否有帮助,但为什么不这样做呢:
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();
}https://stackoverflow.com/questions/34969964
复制相似问题