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

Express中req.body无法获取AJAX POST数据问题求助

问题排查与解决:Express无法获取AJAX POST请求的req.body数据

核心问题原因

你在前端AJAX请求中错误搭配了参数:设置了processData: false和contentType: false(这两个参数仅用于发送FormData格式数据),但实际发送的是普通JSON对象,导致请求的Content-Type不符合服务器解析要求,最终req.body为空。

解决方案

根据你需要的请求数据格式,二选一修改前端代码:

方案1:发送JSON格式数据(推荐)

修改login.js中的AJAX配置,移除不必要的processData和contentType参数,让jQuery自动设置正确的请求头:

$(document).ready(function(){
    $("#continuarBoton").on("click", function(){
        $.ajax({
            url: '/login',
            method: 'POST',
            dataType: 'json',
            data: {
                correo: "test1",
                contrasena: "test2"
            },
            success: function(data) {
                console.log(data);
                if(data.Exito){
                    console.log("Solicitud POST exitosa");
                }else{
                    console.error("Solicitud POST DENEGADA");
                }
            },
            error: function(error) {
                console.error(error);
            }
        });
    });
});

服务器端你已经添加了app.use(express.json());,可以正常解析JSON格式的请求体,无需额外修改。

方案2:发送FormData格式数据

如果确实需要用FormData(比如上传文件),则要将data设置为实际的FormData对象,保留processData和contentType参数:

$(document).ready(function(){
    $("#continuarBoton").on("click", function(){
        var formData = new FormData();
        formData.append("correo", $("#correo").val());
        formData.append("contrasena", $("#contrasena").val());
        $.ajax({
            url: '/login',
            method: 'POST',
            dataType: 'json',
            data: formData, // 传入FormData对象
            processData: false,
            contentType: false,
            success: function(data) {
                console.log(data);
                if(data.Exito){
                    console.log("Solicitud POST exitosa");
                }else{
                    console.error("Solicitud POST DENEGADA");
                }
            },
            error: function(error) {
                console.error(error);
            }
        });
    });
});

这种情况下,服务器端需要安装并配置multer中间件来解析multipart/form-data格式:

  1. 安装依赖:
npm install multer
  1. 修改usuarios.js路由配置:
const express = require('express');
const router = express.Router();
const multer = require('multer');
const upload = multer(); // 仅解析FormData,不存储文件
const usuariosController = require('../controllers/usuariosController');

router.use(upload.none()); // 解析不带文件的FormData
router.get('/', usuariosController.view);
router.post('/', usuariosController.post);
module.exports = router;

额外优化建议

  • Express 4.16及以上版本已内置body-parser功能,直接使用app.use(express.json())和app.use(express.urlencoded({extended: false}))即可,无需单独安装body-parser包。
  • 确保中间件配置放在路由之前,保证所有路由都能使用解析中间件(你当前的express.json()位置正确)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:43:15