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

请求报Invalid content type错误,JSON请求被识别为form-urlencoded

可能的原因及解决方法

1. 表单提交事件未被正确拦截(最常见)

如果你的脚本在DOM加载完成前执行,document.getElementById('signupForm')会返回null,导致事件监听无法绑定,表单会以默认方式提交(Content-Type为application/x-www-form-urlencoded)。

解决方法:

  • 将脚本放在HTML文档的<body>末尾,确保DOM元素已加载;
  • 或者用DOMContentLoaded事件包裹代码,确保DOM加载完成后再绑定事件:
document.addEventListener('DOMContentLoaded', () => {
  const signupForm = document.getElementById('signupForm');
  
  signupForm.addEventListener('submit', async (event) => {
    event.preventDefault(); // 确认这行代码执行
    
    // 后续请求逻辑...
  });
});

2. JSON格式语法错误

你的JSON.stringify中最后一个属性后多了逗号(newPassword: formData.get('newPassword'),),这会导致JSON格式无效,部分浏览器可能会自动调整请求头或拒绝发送正确的JSON请求。

解决方法:
去掉末尾的逗号,修正JSON结构:

body: JSON.stringify({
  newUsername: formData.get('newUsername'),
  newEmail: formData.get('newEmail'),
  newPassword: formData.get('newPassword') // 无末尾逗号
})

3. 服务器端中间件顺序或配置问题

虽然你使用了express.json(),但如果中间件在路由之后被注册,它将无法处理请求;或者express.json()的配置被意外修改。

解决方法:
确保express.json()在所有路由之前注册:

const express = require('express');
const app = express();

// 先注册解析中间件
app.use(express.json()); // 仅处理Content-Type为application/json的请求
app.use(express.urlencoded({ extended: true }));

// 再注册路由
app.post('/signup', (req, res) => {
  // 处理请求逻辑
});

4. 请求头被意外覆盖

某些浏览器扩展或其他代码可能会修改请求头,导致Content-Type被替换。

解决方法:
在fetch请求中添加日志,确认请求头是否正确:

const requestHeaders = new Headers({
  'Content-Type': 'application/json'
});
console.log('Request Headers:', requestHeaders); // 检查Content-Type是否正确

const response = await fetch('/signup', {
  method: 'POST',
  headers: requestHeaders,
  body: JSON.stringify(...)
});

同时在浏览器开发者工具的网络面板中,查看发送到/signup的请求,确认Content-Type是否为application/json。


内容的提问来源于stack exchange,提问作者Mark Pariss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:40:17