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

向服务器发送数据时request.body.mySearch返回undefined的解决方法

问题解决:后端无法读取FormData发送的POST参数

原因分析

前端通过FormData发送的请求,Content-Type为multipart/form-data,而Express框架默认仅解析application/json和application/x-www-form-urlencoded格式的数据,没有内置处理multipart/form-data的中间件,因此request.body无法被正确解析,导致request.body.mySearch返回undefined。

解决方案一:使用multer解析FormData

  1. 安装multer依赖
npm install multer
  1. 在server.js中引入并配置multer,修改路由:
const express = require('express');
const multer = require('multer');
const app = express();

// 初始化multer,无需磁盘存储(仅处理文本字段)
const upload = multer();

// 路由中使用upload.none()中间件解析文本类型的FormData
app.post('/laptops', upload.none(), function(request, response){
  let laptopBrand = request.body.mySearch;
  console.log(laptopBrand);
});

解决方案二:前端改用urlencoded格式发送数据

如果不需要上传文件,可以改为发送application/x-www-form-urlencoded格式,兼容Express默认的解析中间件:

前端修改代码:

//display the searched laptop
function searchProducts(){
    let search = document.getElementById("laptopSearched").value;
    console.log("Search_Value " + search);
 
    // 使用URLSearchParams构建参数
    const params = new URLSearchParams();
    params.append('mySearch', search);

    let request = new XMLHttpRequest();
    request.open("POST", "/laptops");
    // 设置Content-Type
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    // 发送参数
    request.send(params);
}

后端确保已配置urlencoded中间件:

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

// 解析urlencoded格式的数据
app.use(express.urlencoded({ extended: true }));

app.post('/laptops', function(request, response){
  let laptopBrand = request.body.mySearch;
  console.log(laptopBrand);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:40:36