You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法将解码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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 03:22:05