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

前端POST请求API触发405(METHOD NOT ALLOWED)错误求助

问题分析与解决方案

核心问题1:请求目标端口错误

错误信息显示请求发送到http://127.0.0.1:5500/users,但你的后端服务运行在3008端口,前端的相对路径请求会默认指向当前前端服务器(5500端口),而该端口没有/users的POST路由,直接导致405错误。

修复:修改前端fetch的请求地址

将相对路径改为后端的完整地址:

fetch('http://localhost:3008/users',{
  method:"POST",
  headers:{
    "content-type":"application/json"
  },
  body:JSON.stringify(obj)
})

核心问题2:跨域资源共享(CORS)限制

前后端端口不同(5500 vs 3008),浏览器会触发跨域安全拦截,即使请求地址正确也会被阻止。

修复:后端配置CORS

  1. 安装cors中间件:
npm install cors
  1. 在后端代码中引入并启用(放在路由定义之前):
const cors = require('cors');
app.use(cors());

核心问题3:请求体解析配置缺失

前端:启用Content-Type头

你注释掉了content-type头,后端无法识别请求体是JSON格式,需要恢复该配置:

headers:{
  "content-type":"application/json"
},

后端:添加JSON解析中间件

Express默认不会自动解析JSON请求体,必须添加中间件才能正常读取req.body:

app.use(express.json()); // 放在路由定义之前

额外优化:添加请求反馈与错误处理

在前端fetch中补充响应检查和错误捕获,方便调试:

button.addEventListener('click',(e)=>{
  e.preventDefault()
  var obj = {
    firstname:firstname.value,
    lastname:lastname.value,
    age:age.value
  };
  fetch('http://localhost:3008/users',{
    method:"POST",
    headers:{
      "content-type":"application/json"
    },
    body:JSON.stringify(obj)
  })
  .then(res => {
    if (!res.ok) throw new Error(`请求失败,状态码:${res.status}`);
    return res.json();
  })
  .then(data => console.log('提交成功:', data))
  .catch(err => console.error('请求出错:', err))
})

内容的提问来源于stack exchange,提问作者denis kiplangat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:55:16