如果没有(不推荐使用?)body解析器,快速验证器将无法工作

时间:2018-11-22 20:21:50

标签: express express-validator

我已经看到许多帖子,似乎都说不建议使用body-parser至少与express-validator一起使用。在快速验证文档“入门”页面上,我也看不到任何关于body解析器的信息。但是,当我尝试按照该入门教程学习时,我发现没有body-parser不能使它正常工作。我不能完全按照他们的教程来学习,因为我不了解其中的一些内容,但我认为所做的简化与该问题无关。

我的问题是:以我的方式使用body-parser可以吗?

下面是我所做的(我的节点版本为10.10.0):

mkdir express-validator
cd express-validator
npm install --save express
npm install --save express-validator

app.js文件:

const express = require('express')
const app = express()

app.use(express.json())

const { check, validationResult } = require('express-validator/check')

const bodyParser = require('body-parser')

app.use(bodyParser.urlencoded({ extended: false }))

app.post('/user', [
  // username must be an email
  check('username').isEmail(),
  // password must be at least 5 chars long
  check('password').isLength({ min: 5})
], (req, res) => {
  // Finds the validation errors in this request and wraps them in an object with handy functions
  const errors = validationResult(req)
  if (!errors.isEmpty()) {
    res.send(errors.array())
    return
  }
  res.send('ok')
})

app.listen(5000, () => console.log(`listening on port $5000`))

我使用node app.js

启动服务器

然后我使用curl:

curl -d username=fred@gmail.com -d password=12345 localhost:5000/user

那行得通,即我可以将其发送回去。如果我从电子邮件地址中删除@符号,则会得到以下信息:

[{"location":"body","param":"username","value":"fredgmail.com","msg":"Invalid value"}]

如果我注释掉以下行:app.use(bodyParer.url etc etc,则会收到error.array()与上面的两个curl命令一起发送回去。

可以像我一样使用body解析器吗?如果没有,我该怎么做才能使它正常工作?

2 个答案:

答案 0 :(得分:1)

是的,这是正确的用法。

在快速验证器文档中没有提到bodyParser,因为大多数时候您都不需要它。

如今,

JSON和urlencoded正文解析已包含在express中,因此,如果您只需要处理它们,则不需要其他软件包。您只需要确保您的应用使用express.json()express.urlencoded()

app.use(express.urlencoded());
// is the same as
app.use(bodyParser.urlencoded());

答案 1 :(得分:0)

只需使用require('express-validator'),不需要使用/check

修改 const { check, validationResult } = require('express-validator/check') const { check, validationResult } = require('express-validator')