无法将解码Token中的用户ID赋值给req.body.userId的问题排查
问题分析与解决办法
问题原因
- 当请求没有携带请求体时,
req.body是undefined,直接给undefined设置属性userId就会触发TypeError。 - 只有请求体是空对象
{}时,req.body是一个存在的空对象,此时赋值不会报错,但空请求体在实际业务中没有意义。
解决办法
方法一:初始化req.body后再赋值
在给req.body.userId赋值前,先检查req.body是否存在,不存在则初始化为空对象:
try { const tokenDecode = jwt.verify(token, process.env.JWT_SECRET); if(tokenDecode.id){ // 确保req.body存在,不存在则初始化为空对象 req.body = req.body || {}; req.body.userId = tokenDecode.id; }else{ return res.json({ success: false, message: "Not Authorized. Login Again" }); } next(); } catch (error) { return res.json({ success: false, message: error.message }); }
方法二:将用户ID挂载到req上下文(更推荐)
用户ID属于身份验证后的上下文信息,不属于客户端提交的请求体,直接挂载到req对象的独立属性上,完全避免依赖请求体:
try { const tokenDecode = jwt.verify(token, process.env.JWT_SECRET); if(tokenDecode.id){ req.userId = tokenDecode.id; // 直接挂载到req对象,不依赖req.body }else{ return res.json({ success: false, message: "Not Authorized. Login Again" }); } next(); } catch (error) { return res.json({ success: false, message: error.message }); }
后续业务代码中直接通过req.userId获取用户ID即可。
内容的提问来源于stack exchange,提问作者Cherry
相关产品推荐
相关产品推荐

