我的用户注册页面有这样的表单:
<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 }));