如何将textarea数据传递至Node.js?Node.js无法识别发送的数据
问题原因及解决步骤
1. 前端请求的问题:未指定Content-Type且数据格式不规范
你直接把textarea的字符串作为请求body发送,但未告知后端数据类型,导致后端无法正确解析;同时后端期望的是包含userMessage字段的键值对格式,而非纯字符串。
修改前端代码(二选一即可):
continueBtn.addEventListener("click", async () => { console.log(myMsg.value) console.log(typeof(myMsg.value)) // 方式1:用FormData发送(适配表单类数据场景) const formData = new FormData(); formData.append('userMessage', myMsg.value); const req = await fetch("/sendmsg", { method: "POST", body: formData }); // 方式2:用JSON格式发送,需指定Content-Type // const req = await fetch("/sendmsg", { // method: "POST", // headers: { // 'Content-Type': 'application/json' // }, // body: JSON.stringify({ userMessage: myMsg.value }) // }); console.log("Fetched") })
2. 后端的问题:未配置解析中间件,且数据获取方式错误
首先要确保Node.js框架(以Express为例)配置了对应解析中间件,否则req.body会是undefined;其次你当前的解构写法完全错误,Object.keys(req.body)返回的是键名数组,无法直接解构出userMessage。
步骤1:配置解析中间件
在Node.js入口文件中添加:
const express = require('express'); const app = express(); // 适配FormData方式的解析中间件 app.use(express.urlencoded({ extended: true })); // 适配JSON方式的解析中间件 app.use(express.json());
步骤2:正确获取请求数据
修改后端代码:
// 无论用FormData还是JSON方式,均可通过此方式获取字段值 const { userMessage } = req.body;
关键说明
- 前端和后端的数据格式必须匹配:用FormData就对应urlencoded中间件,用JSON就对应json中间件;
- 不建议直接发送纯字符串作为请求body,除非后端专门配置
express.text()中间件并处理纯文本类型请求,常规场景下键值对或JSON格式更符合接口规范。
内容的提问来源于stack exchange,提问作者Haciyev Haci
相关产品推荐
相关产品推荐

