express-validator 在没有(已弃用?)body-parser 的情况下不起作用
express-validator does not work without (deprecated ?) body-parser
我看到很多帖子似乎说 body-parser 至少在与 express-validator 一起使用时已被弃用。在快速验证文档入门页面上,我也看不到任何关于 body-parser 的提及。但是,当我尝试按照入门教程进行操作时,我发现如果没有 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 00`))
我使用 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-parser吗?如果不是,我应该怎么做才能让它发挥作用?
是的,这是正确的用法。
express-validator 文档中没有提到 bodyParser
因为大多数时候你不需要它。
JSON 和 urlencoded body 解析现在包含在 express 中,所以如果你只是处理它们,你不需要另一个包;您只需确保您的应用使用 express.json()
or express.urlencoded()
:
app.use(express.urlencoded());
// is the same as
app.use(bodyParser.urlencoded());
只需使用require('express-validator')
,不需要使用/check
修改 const { check, validationResult } = require('express-validator/check')
为 const { check, validationResult } = require('express-validator')
我看到很多帖子似乎说 body-parser 至少在与 express-validator 一起使用时已被弃用。在快速验证文档入门页面上,我也看不到任何关于 body-parser 的提及。但是,当我尝试按照入门教程进行操作时,我发现如果没有 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 00`))
我使用 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-parser吗?如果不是,我应该怎么做才能让它发挥作用?
是的,这是正确的用法。
express-validator 文档中没有提到 bodyParser
因为大多数时候你不需要它。
JSON 和 urlencoded body 解析现在包含在 express 中,所以如果你只是处理它们,你不需要另一个包;您只需确保您的应用使用 express.json()
or express.urlencoded()
:
app.use(express.urlencoded());
// is the same as
app.use(bodyParser.urlencoded());
只需使用require('express-validator')
,不需要使用/check
修改 const { check, validationResult } = require('express-validator/check')
为 const { check, validationResult } = require('express-validator')