express-validator需要body-parser才能正常工作(已被弃用?)

3
我看到了一些帖子似乎在说 body-parser 已经过时了,至少在与 express-validator 一起使用时是这样。我在 express-validation 的文档 Getting Started 页面上也没有看到关于 body-parser 的提及。然而,当我尝试按照 Getting Started 教程操作时,我发现如果不使用 body-parser 就无法使其正常工作。我不能完全按照他们的教程操作,因为我不理解其中的一些内容,但我认为我所做的简化与此问题无关。
我的问题是:我以这种方式使用 body-parser 是可以的吗?
以下是我所做的(我使用的是 node 版本 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 等等等等,那么我会收到错误信息:array()。请问我现在这样使用body-parser是否正确?如果不是,我应该怎么做才能使其正常工作?
2个回答

3

没错,这是正确的用法。

在 express-validator 文档中并没有提到 bodyParser ,因为大多数情况下你不需要它。

现在的 express 已经包含了 JSON 和 urlencoded body parsing,所以如果你只处理它们,那么就不需要安装其他的包;你只需要确保你的应用程序使用了 express.json()express.urlencoded()

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

2

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接