我刚开始使用带有express-validator的express.js来验证一些输入数据,我在4.0.0版本中引入的新检查API中访问请求体时遇到了问题.
在旧版本中,您只需在body-parser之后的某个地方的app.js中添加express-validator作为中间件:
// ./app.js
const bodyParser = require("body-parser");
const expressValidator = require("express-validator");
const index = require("./routes/index");
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(expressValidator());
Run Code Online (Sandbox Code Playgroud)
然后在我的索引路径中,我可以检查post方法的最终回调函数中的字段.
// ./routes/index.js
const express = require("express");
const router = express.Router();
router.post("/submit", (req, res, next) => {
// check email
req.check('email','Invalid email address').isEmail()
// check if password is equal to password confirmation
req.check('password', 'Invalid password')
/* Access request body to compare password
field with password confirmation field */
.equals(req.body.confirmPassword)
// get errors
const errors …Run Code Online (Sandbox Code Playgroud) 随着express-validator我们如何可以检查的请求查询?
在文档中有一个检查正文的示例:
const { check, validationResult } = require('express-validator/check');
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()) {
return res.status(422).json({ errors: errors.array() });
}
User.create({
username: req.body.username,
password: req.body.password
}).then(user => res.json(user));
});
Run Code Online (Sandbox Code Playgroud)
如何将其设置为仅检查GET方法查询? …
有没有办法在 JavaScript 中链接函数,所以当调用链中的最后一个函数时,我们会考虑链中指定的所有函数。基本上我想做的事情与express-validator 做的事情是一样的:像这样:
check('password').passwordValidator().optional();
Run Code Online (Sandbox Code Playgroud)
我希望能够打电话
check('password').passwordValidator();
Run Code Online (Sandbox Code Playgroud)
和
check('password').passwordValidator().optional();
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用express-validator验证手机号码正则表达式。
我浏览了文档 api,但找不到检查正则表达式的验证器函数。regex.test()像下面这样使用会起作用吗?
body('mobile', 'Invalid mobile number.')
.escape()
.exists({checkFalsy: true})
.isLength({min: 11, max:11})
.regex.test(/^(\+123)\d{11}$/)
Run Code Online (Sandbox Code Playgroud) 我正在尝试在快速路线上验证我的身体,但在尝试找出如何强制执行小数的最小值时遇到困难。我试过了
check("price").exists().isDecimal({min:0})
Run Code Online (Sandbox Code Playgroud)
和
check("price").exists().isDecimal({gt:0})
Run Code Online (Sandbox Code Playgroud)
但似乎都不起作用
我打算将partnerid字段字符长度设为5,这意味着如果用户输入少于5个字符或超过5个字符(包括字母数字字符),将收到错误消息.我们怎么能用express-validator来做呢?我尝试使用下面的代码,但它没有工作谢谢
req.checkBody('partnerid', 'Partnerid field must be 5 character long ').len(5);
Run Code Online (Sandbox Code Playgroud) 我有一个表格,如果一个人的送货地址与其帐单地址不同,他们将选择一个单选按钮说“不”。
我需要能够检查 this 的值是什么,如果它是“否”,请检查展开的表单。如果是“是”,我会跳到下面的下一个验证。“是”部分正在工作,但“否”部分总是返回无效。有没有办法用这个库在这样的条件中嵌套验证?
这是表格的屏幕截图:
这是我针对这种情况的验证代码:
router.post('/testData2/', [
body('billingSameAsShipping', "Please Fill All Fields Of Your Billing Address").custom((value) => {
if (value === 'no') {
[
body('billingFirstName', "Please Enter Your First Name").isLength({
min: 1
}),
body('billingLastName', "Please Enter Your Last Name").isLength({
min: 1
}),
body('billingAddress1', "Please Enter Your Billing Address").isLength({
min: 1
}),
body('billingZip', "Please Enter Your Billing ZipCode").isLength({
min: 1
}),
body('billingCity', "Please Enter Your Billing City").isLength({
min: 1
}),
body('billingState', "Please Enter Your Billing State").isLength({
min: 1
})
] …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 express-validator 来验证 req.body,然后再发送将数据插入到 postgres 的 post 请求。
我有一个路由文件、控制器文件,我想在一个名为 validate.js 的文件中执行验证。同时,我已经安装了 express-validator 并在我的 server.js 中导入了它。我遇到的其他资源似乎在包含插入数据的逻辑的函数中实现了验证。
//server.js
....
import expressValidator from 'express-validator';
...
app.use(bodyParser.urlencoded({ extended: false }));
app.use(expressValidator);
Run Code Online (Sandbox Code Playgroud)
//route.js
import express from 'express';
import usersController from './controller';
const router = express.Router();
router.post('/createuser', usersController.createUser);
Run Code Online (Sandbox Code Playgroud)
//controller.js
createUser(req, res){
// ...
const { firstName, lastName, email, password } = req.body;
//code to insert user details to the database
}
Run Code Online (Sandbox Code Playgroud)
//validator.js
import { check } from 'express-validator/check';
module.exports = [check('email').isEmail()];
Run Code Online (Sandbox Code Playgroud)
我希望在名为 validator.js 的文件中实现验证,例如,在插入数据库之前验证电子邮件
我在我的项目中使用 Express-validator 我来自客户端的 json 是
{"name": "john doe"}
Run Code Online (Sandbox Code Playgroud)
我的快速验证码是
[check('name', 'invalid name').isAlpha()]
Run Code Online (Sandbox Code Playgroud)
为什么此代码返回无效名称,而这是一个字符串。我也尝试了isString()但它也不起作用,它的工作方式与isAlpha()相同。对客户端的错误json 响应是
{
"errors": [
{
"value": "john doe",
"msg": "invalid name",
"param": "name",
"location": "body"
}
]
}
Run Code Online (Sandbox Code Playgroud)
isAlpha() 函数是否只将一个单词视为字符串
我怎样才能解决这个问题
根据我自己的知识,您可以在 mongoose 模式中进行几乎所有可以使用 express-validator 进行的验证。所以我可以只使用猫鼬吗,或者即使我只创建新文档,我也需要使用 express-validator
express ×7
node.js ×7
javascript ×2
validation ×2
html ×1
mongodb ×1
mongoose ×1
validator.js ×1