POST接口关联用户ID添加Fixture报401 Unauthorized错误求助
尝试向端点发送POST请求,将与用户USERID关联的Fixture集合更新至用户资料,但一直收到401 Unauthorized错误。
路由代码
router.post(`/newfixture/:id`, async (req, res) => { let fixture = new Fixture({ id: req.body.id, homeTeam: req.body.homeTeam, awayTeam: req.body.awayTeam, date: req.body.date, time: req.body.time, venue: req.body.venue, }); // save the fixture to the user and return a response fixture = await fixture.save({ id: req.body.id, homeTeam: req.body.homeTeam, awayTeam: req.body.awayTeam, date: req.body.date, time: req.body.time, venue: req.body.venue, }); if (!fixture) { return res.status(404).send("The fixture cannot be created!"); } res.send(fixture); console.log("fixture created", fixture); });
Axios请求代码
axios .post(`${baseURL}users/fixtures/newfixture/${id}`, { homeTeam: homeTeam, awayTeam: awayTeam, venue: venue, date: date, time: time, }) .then(res => { if (res.status === 200) { console.log('🤣 🤣 🤣 🤣 🤣 FIXTURE PUT', userProfile); } else { console.log('🤣 🤣 🤣 🤣 🤣 NOPE ', userProfile); } });
中间件配置
const userRoute = require("./routers/users"); app.use(`${api}/users`, userRoute);
MongoDB连接字符串
mongodb+srv://USERNAME:PASSWORD@cluster0.svhnchn.mongodb.net/?retryWrites=true&w=majority
排查与解决建议
1. 确认身份验证配置
401错误核心是身份验证失败,先检查:
- 该路由是否需要身份验证(比如JWT、Session),如果需要,Axios请求必须携带正确的凭证(比如
Authorization: Bearer <token>请求头) - 后端路由是否挂载了认证中间件,比如
router.post('/newfixture/:id', authMiddleware, ...),没有挂载的话可能是全局拦截器触发了401
2. 核对请求URL与路由匹配
从中间件配置看,用户路由挂载在${api}/users下,但Axios请求的URL是${baseURL}users/fixtures/newfixture/${id}:
- 检查
api变量的值是否包含在baseURL中,比如api是/api,则完整URL应为${baseURL}/api/users/newfixture/${id},路径不匹配可能触发未配置路由的认证拦截 - 路由文件中的路径是
/newfixture/:id,加上挂载路径后是${api}/users/newfixture/:id,但Axios请求多了/fixtures,这会导致请求到错误的路由,引发401
3. 修正Fixture保存逻辑
当前代码中fixture.save()重复传入字段,save()方法不需要额外传参,正确写法是await fixture.save(),虽然这不是401的直接原因,但会导致数据保存异常,建议修正。
4. 补全用户关联逻辑
需求是将Fixture与用户USERID关联,但当前路由没有处理关联逻辑:
- 应从认证信息(如
req.user._id)或URL参数:id获取用户ID,给Fixture添加userId字段后再保存 - 若后端有权限校验(比如检查Fixture所属用户),缺少关联会导致权限校验失败返回401
5. 调试请求与后端日志
- 在Axios中添加请求头和状态码日志,确认认证凭证是否正确:
axios.post(`${baseURL}users/fixtures/newfixture/${id}`, { homeTeam: homeTeam, awayTeam: awayTeam, venue: venue, date: date, time: time, }, { headers: { 'Authorization': 'Bearer ' + token }, // 替换为实际token validateStatus: status => { console.log('响应状态码:', status); return true; // 保留所有状态码便于调试 } })
- 后端添加日志打印
req.headers和req.user(若有认证中间件),确认认证是否通过
内容的提问来源于stack exchange,提问作者Jason Byron Beedle
相关产品推荐
相关产品推荐

