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

使用Postman环境变量传递JWT时请求无法完成的问题排查

问题排查与解决方案

首先,你的代码里存在一个致命错误,直接导致请求挂起无响应:

在第4步检查用户是否修改密码的逻辑中,你写的是:

return new AppError(
  'User recently changed password. Please login again.',
  401
);

这里只返回了错误对象,但没有调用next()把错误传递给Express的错误处理中间件,导致请求没有任何响应返回,Postman自然会一直卡在“发送请求”状态。

修复代码错误

把这行代码改成:

return next(new AppError(
  'User recently changed password. Please login again.',
  401
));

这样错误会被正确传递,Express会返回对应的401响应,请求不会再挂起。

Postman相关排查

  1. Authorization头的正确使用:
    HTTP请求头是大小写不敏感的,但Express会自动将所有请求头转换为小写,所以req.headers.authorization是正确的写法,大写的req.headers.Authorization会返回undefined,这就是你用大写时返回“未登录”错误的原因。

  2. 环境变量验证:

    • 确认Postman中环境变量jwt的取值正确,是登录/注册接口返回的完整JWT令牌(不要包含Bearer 前缀)。
    • 在请求的Authorization选项中选择Bearer Token,然后在Token输入框中填入{{jwt}},让Postman自动帮你拼接Bearer 前缀和令牌,避免手动输入出错。
  3. 请求头检查:
    发送请求前,切换到Postman的Headers标签,确认Authorization头已经正确生成,格式为Bearer 你的JWT令牌,没有拼写错误。

额外检查:全局错误处理中间件

确保你的Express项目中配置了全局错误处理中间件,否则即使调用了next(err),也可能无法返回正确的响应:

// 放在所有路由之后
app.use((err, req, res, next) => {
  const statusCode = err.statusCode || 500;
  const status = err.status || 'error';

  res.status(statusCode).json({
    status,
    message: err.message
  });
});

修复代码中的错误后,再验证Postman的配置,应该就能正常访问受保护路由了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:55:03