服务器似乎看不到 HTML 表单的内容



我的用户注册页面有这样的表单:

<form action="/users" method="post">
<input type="text" name="Ainm">
<input type="text" name="Password">
<input type="text" name="Email">
<input type="submit" value="Submit">
</form>

并且相应的服务器文件具有:

bodyParser = require('body-parser');
app.use(bodyParser.json());

//add new user - required fields = username, password, email
app.post('/users', function (req, res) {
Users.findOne({ Ainm: req.body.Ainm })
.then(function (user) {
if (user) {
return res.status(400).send(req.body.Ainm + " Name already in use.");
} else {
Users
.create({
Ainm: req.body.Ainm,
Password:req.body.Password,
Email: req.body.Email
})
.then(function (user) { res.status(201).json(user) })
.catch(function (error) {
console.error(error);
res.status(500).send("Error: " + error);
})
}
}).catch(function (error) {
console.error(error);
res.status(500).send("Error: " + error);
});
});

但当我尝试输入一些测试数据时,我看到

Undefined Name already in use.

为什么Ainm的值可能没有定义?

谢谢。

app.use(bodyParser.json());

这是您的问题。

表单数据未编码为JSON。它将使用application/x-www-form-urlencoded编码。

您需要使用bodyParser.urlencoded()

您的代码中似乎没有body解析器中间件(同时拥有urlrencoded和json以使API在未来通用(

如果您使用的是4.16以下的express,请安装body解析器

const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json())

其他当前版本(4.16及以上(的express带有内置的bodyParser

app.use(express.json())
app.use(express.urlencoded({ extended: true })); 

最新更新