📌  相关文章
📜  如何在 Node.js 中使用 express-validator 模块验证数据?(1)

📅  最后修改于: 2023-12-03 15:38:21.817000             🧑  作者: Mango

在 Node.js 中使用 express-validator 模块验证数据

express-validator 是基于 Express 的常规中间件集合的一部分。它提供了一种易于使用和灵活的机制来验证输入数据,以确保输入是有效的。它可以与任何中间件一起使用,包括 body-parser、multer、cookie-parser 等等。

安装

使用 npm 安装 express-validator 模块:

npm install express-validator
基本使用

以下是使用 express-validator 验证数据的示例:

const express = require('express');
const { body, validationResult } = require('express-validator');

const app = express();

app.use(express.json());

app.post('/signup', [
  // 验证用户名长度是否大于等于5,小于15
  body('username').isLength({ min: 5, max: 15 }).withMessage('用户名长度必须在5到15个字符之间'),
  // 验证密码长度是否小于8,大于16
  body('password').isLength({ min: 8, max: 16 }).withMessage('密码长度必须在8到16个字符之间')
], (req, res) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(422).json({ errors: errors.array() });
  }

  // 保存数据
});

在上面的代码中,我们使用了 body 校验器对请求体中的数据进行验证。isLength 校验器用于验证指定字段的长度是否符合要求。如果验证不通过,则用 withMessage 方法设置错误消息,然后在中间件的最后检查所有的参数是否有错误。

如果有错误,则返回 422 状态码和一个包含错误对象的 JSON。

更多用法

以下是一些更高级的用法:

使用自定义验证器

您还可以编写您自己的自定义验证器来完成特定的验证任务。例如,检查电子邮件是否已存在于数据库中:

const { check } = require('express-validator');
 
const emailExists = () => {
  return check('email').custom(async value => {
    const user = await getUserByEmail(value);
    if (user) {
      return Promise.reject('电子邮件已被使用');
    }
  });
}
 
app.post('/signup', [
  emailExists(),
  
  // 其他验证器
], (req, res) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(422).json({ errors: errors.array() });
  }

  // 保存数据
});

在上述代码中,我们定义了一个名为 emailExists 的自定义验证器,并在 check('email') 中使用它。这个验证器使用了 custom 方法,在里面编写了查询电子邮件是否已经存在于数据库中的逻辑。

使用错误消息

您可以使用 withMessage 方法为所有的验证器使用相同的错误消息,也可以为每个验证器分别使用不同的消息。

app.post('/signup', [
  emailExists().withMessage('电子邮件已被使用'),
  
  body('username')
    .isLength({ min: 5, max: 15 }).withMessage('用户名长度必须在5到15个字符之间')
    .notEmpty().withMessage('用户名不能为空'),
    
  body('password')
    .isLength({ min: 8, max: 16 }).withMessage('密码长度必须在8到16个字符之间')
    .notEmpty().withMessage('密码不能为空'),
  
  // 其他验证器
], (req, res) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(422).json({ errors: errors.array() });
  }
  // 保存数据
});

在上述代码中,我们针对每个验证器分别设置了错误消息,也可以使用 withMessage 方法设置所有验证器的相同错误消息。

使用花式验证

express-validator 还提供了其他很多验证方法,可以查看 官方文档 了解更多花式验证方式。

总结

在本文中,我们了解了如何使用 express-validator 模块并验证输入数据。它简化了数据验证的过程,使我们能够更轻松地从客户端获得有效的数据并使用它们。