📜  如何在 Node.js 中使用 joi 模块验证数据?(1)

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

如何在 Node.js 中使用 joi 模块验证数据?

joi 是一个用于验证和解析请求数据的 Node.js 模块。本文将介绍如何使用 joi 进行数据验证。

安装

可以使用 npm 来安装 joi 模块:

npm install joi
用法

首先需要引入 joi 模块:

const Joi = require('joi');

然后就可以使用 joi 进行数据验证了。以下示例演示了如何验证一个请求中的参数:

const schema = Joi.object({
  username: Joi.string().alphanum().min(3).max(30).required(),
  password: Joi.string().pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')),
  repeat_password: Joi.ref('password'),
  birth_year: Joi.number().integer().min(1900).max(2013),
});

app.post('/register', (req, res) => {
  const { error, value } = schema.validate(req.body);
  if (error) {
    // 数据验证失败
  } else {
    // 数据验证成功
  }
});

在以上示例中,我们定义了一个数据结构 schema,它描述了数据的规则。然后我们在注册路由中使用了 schema 对请求参数进行了验证。

验证器

joi 支持多种验证器,比如 string()、number()、boolean()、date() 等等。以下是一些常用的验证器:

string()

验证字符串类型数据,常用选项:

  • alphanum(): 只允许字母和数字。
  • email(): 邮箱格式。
  • min(length: number): 最小长度。
  • max(length: number): 最大长度。
  • required(): 必填项。
number()

验证数字类型数据,常用选项:

  • integer(): 整数。
  • min(value: number): 最小值。
  • max(value: number): 最大值。
  • required(): 必填项。
boolean()

验证布尔类型数据,常用选项:

  • required(): 必填项。
date()

验证日期类型数据,常用选项:

  • format(format: string): 指定日期格式。
  • iso(): ISO 8601 日期格式。
  • timestamp('posix' | 'javascript'): 时间戳格式。
  • min(date: Date): 最小日期。
  • max(date: Date): 最大日期。
  • required(): 必填项。
自定义错误消息

当验证失败时,joi 的默认错误消息可能不能满足需求。可以通过传递一个对象来自定义错误消息:

const schema = Joi.object({
  email: Joi.string().email().required()
}).messages({
  // 自定义错误消息
  'string.email': '必须输入有效的邮箱地址'
});
总结

本文介绍了 joi 模块的基本用法和常用的验证器,可以使用 joi 来对请求数据进行验证,以确保其符合规定的格式和要求。