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

打印时req.body.message返回undefined,表单POST请求问题求助

解决req.body.message返回undefined的问题

你的问题核心是Express后端未配置解析multipart/form-data类型请求体的中间件。

前端通过FormData发送请求时,请求的Content-Type会自动设为multipart/form-data,但Express默认的express.urlencoded()中间件仅支持解析application/x-www-form-urlencoded格式的表单数据,无法处理multipart/form-data,导致req.body为空对象,自然req.body.message返回undefined。

解决方案:用multer中间件解析FormData

multer是Express生态中处理multipart/form-data的标准工具,因为你没有文件上传需求,用最简配置即可:

  1. 安装multer
npm install multer
  1. 修改Express代码,引入并配置multer:
const express = require('express');
const fs = require('fs');
const multer = require('multer');
const app = express();

// 配置multer:仅处理文本字段,不处理文件上传
const upload = multer().none();

app.post("/postmessage", upload, (req, res) => {
   // 此时req.body已能正确获取FormData中的字段
   const MessageData =  storedUsername + " - " + req.body.message  + "\n";
  console.log(MessageData);
  res.setHeader('Content-Type', 'application/json');
  fs.appendFileSync('messagelist.txt', MessageData, { flag: 'a' });
  res.send(JSON.stringify({ variable: MessageData}));
});

额外验证步骤

可以在前端提交事件中添加一行代码,确认FormData确实包含输入的message值:

document.getElementById('messagesubmission').addEventListener('submit', function (event) {
    event.preventDefault();
    console.log("hit");
    var MessageData = new FormData(this);
    // 验证前端是否正确获取输入值
    console.log('前端获取的message:', MessageData.get('message'));
    fetch('/postmessage', {
      method: 'POST',
      body: MessageData
    })
    // ...后续代码不变
});

修改完成后,后端就能正确解析FormData中的message字段,req.body.message不会再返回undefined。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:55:07