有效字段的快速验证器抛出错误
express-validator throwing error with valid field
已尽最大努力遵循文档 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')
似乎在我省略名称时捕获错误。尽管如此,我还是希望得到有关此问题的反馈。
这里是 express-validator 维护者。
为了 select 嵌套在其他对象中的字段,您使用点符号指定其路径*:
check('userRegistrationForm.name')
* 我知道,如果您提出要求,我们可能需要更好的文档来解决这个问题!欢迎 PR。
我想在这里添加一些对我有帮助的东西:确保将 Content-Type
header 设置为 application/json
,否则验证总是失败
已尽最大努力遵循文档 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')
似乎在我省略名称时捕获错误。尽管如此,我还是希望得到有关此问题的反馈。
这里是 express-validator 维护者。
为了 select 嵌套在其他对象中的字段,您使用点符号指定其路径*:
check('userRegistrationForm.name')
* 我知道,如果您提出要求,我们可能需要更好的文档来解决这个问题!欢迎 PR。
我想在这里添加一些对我有帮助的东西:确保将 Content-Type
header 设置为 application/json
,否则验证总是失败