使用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相关排查
Authorization头的正确使用:
HTTP请求头是大小写不敏感的,但Express会自动将所有请求头转换为小写,所以req.headers.authorization是正确的写法,大写的req.headers.Authorization会返回undefined,这就是你用大写时返回“未登录”错误的原因。环境变量验证:
- 确认Postman中环境变量
jwt的取值正确,是登录/注册接口返回的完整JWT令牌(不要包含Bearer前缀)。 - 在请求的
Authorization选项中选择Bearer Token,然后在Token输入框中填入{{jwt}},让Postman自动帮你拼接Bearer前缀和令牌,避免手动输入出错。
- 确认Postman中环境变量
请求头检查:
发送请求前,切换到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
相关产品推荐
相关产品推荐

