我已经看到许多帖子,似乎都说不建议使用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解析器吗?如果没有,我该怎么做才能使它正常工作?
答案 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')