如何使用express-validator在单独的文件中实现验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用express-validator在单独的文件中实现验证相关的知识,希望对你有一定的参考价值。

我正在尝试使用express-validator来验证req.body,然后发送一个post数据到postgres的post请求。

我有一个路由文件,控制器文件,我想在一个名为validate.js的文件中进行验证。同时,我已经安装了express-validator并在我的server.js中导入了它。我遇到的其他资源似乎在包含插入数据的逻辑的函数中实现验证。

//server.js
....
import expressValidator from 'express-validator';

...
app.use(bodyParser.urlencoded({ extended: false }));
app.use(expressValidator);

//route.js
import express from 'express';
import usersController from './controller';

const router = express.Router();

router.post('/createuser', usersController.createUser);

//controller.js
createUser(req, res){
 ...
const { firstName, lastName, email, password } = req.body;
//code to insert user details to the database
}

//validator.js
import { check } from 'express-validator/check';

module.exports = [check('email').isEmail()];

我希望在一个名为validator.js的文件中实现验证,比如在插入数据库之前验证电子邮件

答案

这是我使用express-validator的方式。我有一个文件validator.js,其中我有许多路线的验证逻辑。例如: validator.js

const { check } = require('express-validator/check');

exports.createUser = [check('email').isEmail()];

exports.anotherRoute = [// check data];

exports.doSomethingElse = [// check data];

现在在路由文件中,您需要validator.js文件 const validator = require("./validator"); // or where your file is located 并使用您想要的验证逻辑作为中间件。例如: route.js

//

router.post('/createuser', validator.createUser, usersController.createUser);

最后,在控制器内部,您需要在需要validationResult后检查验证期间可能出现的错误。 controller.js

const { validationResult } = require('express-validator/check');


exports.createUser(req, res) {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
        return res.status(422).json({ errors: errors.array() });
    }
    // do stuff here.

}

此外,您不必在server.js文件中使用app.use(expressValidator);

以上是关于如何使用express-validator在单独的文件中实现验证的主要内容,如果未能解决你的问题,请参考以下文章

javascript 如何使用express-validator验证表达式是否为空?

使用 express-validator 作为 websockets 的中间件

在 joi 和 express-validation 中允许字符串为空或空

Express-Validator 中的验证

express-validator在Express 4中未正确初始化

使用 Express-Validator 验证 POST 参数