req.body 在 express.js v8.1.4 上的 post 之后未定义?

req.body undefined after post on express.js v8.1.4?

我想使用此 HTML 代码发出 post 请求:

<!DOCTYPE html>
<form action="/post-test" method="post">
    <input type="text" id="name" />
    <input type="submit" value="submit">
</form>

然后在后台控制台写入请求。 所以这是我的后端代码:

const path = require('path');
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(express.static(path.join(__dirname, 'views')));
    
app.use(bodyParser.json());
    
app.get('/', function(req, res) {
    res.sendFile(path.join(__dirname, "/views/html/test.html"));
});
app.post('/post-test', async function(req, res) {
    const data = req.body;
    console.log(data.name);
    });

当我在输入中键入内容并按提交时,控制台显示未定义。 问题出在哪里,你有解决办法吗?

在表单中添加名称参数并输入一个值,即插入到请求正文中

<form action="post-test" method="post">
    <input type="text" id="name" name="name"/>
    <input type="submit" value="submit">
</form>

在您访问的后台

req.body.name

将表单操作更改为路由名称

<form action="/createGazme" method="post">
</form>

您有多个问题。

路径中有错别字

action="/post-test"app.post('/createGazme'需要匹配

表单控件post名称=值数据

您的输入没有 name 因此它不会 post 任何数据。给它一个。

<input type="text" name="name">

id 属性用于 客户端 目的,例如作为 link 目标或使用 <label> 关联 for属性。

您的正文解析器用于错误的数据类型

表单,默认情况下,application/x-www-form-urlencoded 中的 post 数据。您可以使用 enctype attribute 将其更改为 multipart/form-data.

您的正文解析器 — app.use(bodyParser.json()); 只能处理 application/json 个正文。您需要一个支持您实际使用的数据格式的正文解析器。

body-parser 模块已经过时了。 Express 有一个内置的。

express.json() 将完成您当前模块的功能(但仍然无法正常工作)。

express.urlencoded() 将支持您的表单。

app.use(bodyParser.urlencoded());