3

我看过一些帖子,似乎说 body-parser 至少在与 express-validator 一起使用时已被弃用。我也看不到在 express-validation 文档入门页面上没有提到 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 -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我会使用上面的两个 curl 命令将 error.array() 发回。

可以像我一样使用 body-parser 吗?如果不是我应该怎么做才能让它工作?

4

2 回答 2

3

是的,这是正确的用法。

express-validator 文档中没有提及,bodyParser因为大多数时候您不需要它。

JSON 和 urlencoded 正文解析现在包含在 express 中,因此如果您只处理它们,则不需要另一个包;您只需要确保您的应用使用express.json()express.urlencoded()

app.use(express.urlencoded());
// is the same as
app.use(bodyParser.urlencoded());
于 2018-11-26T07:07:01.720 回答
2

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

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

于 2021-05-17T13:37:19.777 回答