MERN栈应用更新Bus时遇Not authorized, no token错误求助
公交票务系统Bus更新接口授权失败问题排查与解决方案
问题根源
你已经精准定位到核心问题:busService.js中axios.put的参数顺序错误。axios.put的标准调用格式为axios.put(url, 请求数据, 配置对象),但你误将包含Authorization头的配置对象放在了第二个参数位置,请求数据被挤到了第三个参数。这导致请求头并未被正确附加到HTTP请求中,后端authMiddleware.js的protect中间件无法检测到JWT Token,因此抛出"Not authorized, no token"错误。
解决方案
修正busService.js里updateBus方法的axios.put参数顺序,将请求数据放在第二个参数,配置对象(含Authorization头)放在第三个参数:
错误代码示例
// 错误的axios.put调用顺序 export const updateBus = (busId, busData, token) => { const config = { headers: { Authorization: `Bearer ${token}` } }; // 参数顺序错误:url, config, busData return axios.put(`/api/buses/${busId}`, config, busData); };
修正后的正确代码
// 正确的axios.put调用顺序 export const updateBus = (busId, busData, token) => { const config = { headers: { Authorization: `Bearer ${token}` } }; // 参数顺序:url, busData, config return axios.put(`/api/buses/${busId}`, busData, config); };
验证步骤
- 保存修正后的代码,重启前端开发服务
- 执行Bus更新操作,打开浏览器开发者工具(F12)的Network面板
- 找到对应更新接口的请求,检查Request Headers中是否存在
Authorization: Bearer [你的Token]字段 - 确认后端接口正常处理更新请求,不再抛出授权错误
内容的提问来源于stack exchange,提问作者brown boy
相关产品推荐
相关产品推荐

