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

POST接口关联用户ID添加Fixture报401 Unauthorized错误求助

问题:POST请求更新用户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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:25:24