0

尽我所能遵循此处的文档,但我无法使其正常工作。

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')在我省略名称时似乎捕获了错误。不过,我想获得有关此问题的反馈。

4

2 回答 2

2

express-validator 维护者在这里。

为了选择嵌套在其他对象中的字段,您可以使用点符号*指定其路径:

check('userRegistrationForm.name')

* 我承认,如果您要问,我们可能需要更好的文档来解决这个问题!欢迎 PR。

于 2018-05-27T07:54:48.290 回答
1

我想在这里添加一些对我有帮助的东西:确保将Content-Type标头设置为application/json,否则验证总是失败

于 2021-03-17T13:54:04.483 回答