我尽力遵循文档here,但我无法让它发挥作用。
server.js
const express = require('express');
const app = express();
app.use(express.json())
app.use('/', index);
index.js
const router = express.Router()
const { check, validationResult } = require('express-validator/check')
router.post('/register', [
check('name').exists()
], function(req, res) {
const validationErrors = validationResult(req)
if (!validationErrors.isEmpty()) {
console.log("validationErrors.array()\n", validationErrors.array())
}
})
为了测试这一点,我在客户端输入了有效的name
,它在req.body
中显示得很好。值得注意的是req.body
具有以下结构:
{ userRegistrationForm:
{ name: 'John Doe',
email: 'john@example.com',
password: '',
gender: '',
birthMonth: 'Month',
birthDate: 'Day',
birthYear: 'Year' } }
文档提及check('username').isEmail(),
,但我不知道'username'
来自何处,除非默认情况下check()
方法正在查看req.body
。
无论我做什么(意思是我输入有效名称),我都会收到相同的验证错误:
[ { location: 'body',
param: 'name',
value: undefined,
msg: 'Invalid value' } ]
如何正确使用check()
方法?
更新:
我想我明白了。我修改了我的客户端以将req.body.name
传递给服务器(而不是req.body.userRegistrationForm.name
),并且check('name')
似乎在我省略名称时捕获错误。不过,我想就此问题得到反馈。
答案 0 :(得分:2)
express-validator maintainer。
要选择嵌套在其他对象中的字段,请使用点表示法指定其路径*:
check('userRegistrationForm.name')
*我承认,如果您要求,我们可能需要更好的文档才能涵盖这一点! PR欢迎。
答案 1 :(得分:1)
我想在这里添加一些对我有帮助的内容:确保将 Content-Type
标头设置为 application/json
,否则验证总是失败