Joi for JavaScript (Node.js): 完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Joi 简介:它是什么以及为什么需要它

\n\n

Joi 是一个用于 JavaScript (Node.js) 环境的强大数据验证库。它允许您通过简单且富有表现力的 API 来描述数据模式,然后检查实际对象是否符合这些模式。Joi 在开发 Web 应用程序的后端时尤其受欢迎,因为需要验证传入请求、配置、表单数据以及任何其他数据结构。

\n\n

使用 Joi 的主要原因:

\n
    \n
  • 安全性: 防止不正确或恶意数据进入您的应用程序
  • \n
  • 代码可读性: Joi 模式易于阅读和理解
  • \n
  • 灵活性: 支持复杂的嵌套结构、条件验证和自定义规则
  • \n
  • 集成: 与 Express、Koa、Fastify 和其他框架完美配合
  • \n
  • 详细错误: 提供清晰的错误消息,并指出问题的确切位置
  • \n
\n\n

安装 Joi

\n\n

通过 npm 或 yarn 在 Node.js 项目中安装 Joi:

\n\n
# 通过 npm\nnpm install joi\n\n# 通过 yarn\nyarn add joi\n\n# 如果您使用 TypeScript,请安装类型(可选)\nnpm install @types/joi --save-dev
\n\n

安装后,您可以将 Joi 导入到您的项目中:

\n\n
const Joi = require('joi');\n// 或用于 ES 模块:\n// import Joi from 'joi';
\n\n

快速入门:第一个验证示例

\n\n

让我们创建一个简单的模式来验证用户数据并检查其工作:

\n\n
const Joi = require('joi');\n\n// 定义验证模式\nconst schema = Joi.object({\n    username: Joi.string()\n        .alphanum()\n        .min(3)\n        .max(30)\n        .required(),\n    password: Joi.string()\n        .pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')),\n    email: Joi.string()\n        .email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } })\n});\n\n// 要检查的数据\nconst userData = {\n    username: 'john_doe',\n    password: 'myPassword123',\n    email: 'john@example.com'\n};\n\n// 执行验证\nconst { error, value } = schema.validate(userData);\n\nif (error) {\n    console.log('验证错误:', error.details);\n} else {\n    console.log('数据有效:', value);\n}
\n\n

在此示例中,我们为具有三个字段的对象创建了一个模式。validate() 方法返回一个具有两个属性的对象:error(如果有错误)和 value(验证后的数据)。

\n\n

Joi 的主要方法

\n\n

1. Joi.string() — 字符串验证

\n

功能: 为字符串值创建验证器。提供多种方法来检查字符串的长度、格式、内容和其他特征。

\n\n

参数: 无参数。返回一个验证器对象,可以对其应用方法链。

\n\n

示例:

\n
const schema = Joi.string()\n    .min(3)           // 最小长度 3 个字符\n    .max(10)          // 最大长度 10 个字符\n    .alphanum()       // 仅字母和数字\n    .required();      // 必填字段\n\nconsole.log(schema.validate('Hello'));    // { value: 'Hello' }\nconsole.log(schema.validate('Hi'));       // { error: ... } - 字符串太短\nconsole.log(schema.validate('Hello123')); // { value: 'Hello123' }\nconsole.log(schema.validate('Hello!'));   // { error: ... } - 包含特殊字符
\n\n

2. Joi.number() — 数字验证

\n

功能: 为数值创建验证器。允许检查范围、整数、正数和其他数字属性。

\n\n

参数: 无参数。支持方法链进行配置。

\n\n

示例:

\n

                
    
    

推荐