express-validator抛出有效字段的错误

时间:2018-05-26 13:58:44

标签: express-validator

我尽力遵循文档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')似乎在我省略名称时捕获错误。不过,我想就此问题得到反馈。

2 个答案:

答案 0 :(得分:2)

express-validator maintainer。

要选择嵌套在其他对象中的字段,请使用点表示法指定其路径*:

check('userRegistrationForm.name')

*我承认,如果您要求,我们可能需要更好的文档才能涵盖这一点! PR欢迎。

答案 1 :(得分:1)

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