打印时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的标准工具,因为你没有文件上传需求,用最简配置即可:
- 安装multer
npm install multer
- 修改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
相关产品推荐
相关产品推荐

