有效字段的快速验证器抛出错误

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,否则验证总是失败