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

Node.js中无法读取token属性问题求助

无法读取token属性的问题排查与修复

1. 直接导致token读取失败的错误(verifytoken.js)

你在verifyToken函数里错误地从响应对象res中获取请求头,正确的请求头应该从请求对象req里读取:

// 错误代码
const authHeader = res.headers.token;

// 修复后
const authHeader = req.headers.token;

res是服务器返回给客户端的响应对象,根本不会包含客户端发送的请求头,这就是程序提示无法读取token属性的核心原因。

如果你的token是放在更规范的Authorization请求头(格式为Bearer <token>),建议改成这种通用写法:

const authHeader = req.headers.authorization;
if(authHeader){
    const token = authHeader.split(' ')[1]; // 提取Bearer后的token字符串
    // 后续JWT验证逻辑不变
}

2. user.js 中的两处必改错误

2.1 缺失CryptoJs模块引入

代码里用到了CryptoJs加密,但没有提前引入,会触发CryptoJs is not defined错误,需要在文件顶部添加:

const CryptoJs = require("crypto-js");

2.2 req对象属性大小写错误

你写的req.User.id是大写的U,但在verifyToken里我们给req挂载的是小写的req.user,必须修正为:

// 错误代码
const updateduser = await User.findByIdAndUpdate(req.User.id, {
    $set: req.body
},{new: true});

// 修复后
const updateduser = await User.findByIdAndUpdate(req.user.id, {
    $set: req.body
},{new: true});

3. 额外验证建议

  • 检查Postman中请求头的key是否和代码里读取的一致:如果代码读req.headers.token,请求头就要加token: <你的JWT字符串>;如果用Authorization头,就加Authorization: Bearer <你的JWT字符串>。
  • 确保process.env.JWT_SEC和process.env.PASS_SEC已经正确配置,避免后续验证或加密失败。

内容的提问来源于stack exchange,提问作者Z3eme

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:06:32