我们用nodejs实现一些功能时,往往需要对用户输入的数据进行验证。...然而,验证是一件麻烦的事情,很有可能你需要验证数据类型,长度,特定规则等等,在前端做表单验证时,我们常用的做法是使用正则,正则表达式也许可以一步到位,但是他只会给你true or false,如果想要知道数据不符合哪些条件时...().invalid(5).validate(5); // error 允许是任何类型: Joi.any().validate() // pass 如果需要校验对象的子对象,那么Joi的描述也可以作为了一个子对象...也可以使用正则: Joi.object({ password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/) }); 在 hapijs 中使用Joi hapijs...自家的Joi 当然要无缝对接起来 var Hapi = require('hapi'); var Joi = require('Joi'); var server = new Hapi.Server
本文作者:IMWeb zzbozheng 原文出处:IMWeb社区 未经同意,禁止转载 我们用nodejs实现一些功能时,往往需要对用户输入的数据进行验证。...然而,验证是一件麻烦的事情,很有可能你需要验证数据类型,长度,特定规则等等,在前端做表单验证时,我们常用的做法是使用正则,正则表达式也许可以一步到位,但是他只会给你true or false,如果想要知道数据不符合哪些条件时...().invalid(5).validate(5); // error 允许是任何类型: Joi.any().validate() // pass 如果需要校验对象的子对象,那么Joi的描述也可以作为了一个子对象...也可以使用正则: Joi.object({ password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/) }); 在 hapijs 中使用Joi hapijs...自家的Joi 当然要无缝对接起来 var Hapi = require('hapi'); var Joi = require('Joi'); var server = new Hapi.Server
__joi : joi的typescript声明 # @nestjs/config 内置了dotenv yarn add @nestjs/config joi yarn add -D @types/hapi...abortEarly: true, // 如果为true,在遇到第一个错误时就停止验证;如果为false,返回所有错误。默认为false。...这里只用到了joi的基础语法,比如默认转换格式,添加默认值....匹配数组有效值,不匹配默认用默认值~ 若是环境变量使用异常,或者转换异常就会抛出类似的错误 image.png ConfigModule 之 load 这个可以用来加载组合的配置函数, 比如你一些配置分散在多个....env中, 然后需要组装成一个对象传入,方便使用!
const course = { id: courses.length + 1, name: req.body.name }; // 向课程列表数组中添加一个新项 courses.push...().min(3).required() }; return Joi.validate(course, schema); } 关于http接口测试工具,可以使用Postman或者在VSCode...不过需要注意的是,在npm官网上作者说joi包已经被废弃了,建议使用@hapi/joi This package has been deprecated Author message: This module...has moved and is now available at @hapi/joi....参考资料 joi https://hapi.dev/module/joi/ @hapi/joi jjoi-The most powerful data validation library for JS
中间件函数可以在请求到达路由处理程序之前或之后执行,用于功能如日志记录、身份验证、数据解析等。...Koa 作为 Express 的后继者,Koa 在异步操作处理和中间件机制上更加先进,通过使用 async/await 语法,让异步代码的编写更加直观,采用洋葱模型的中间件,使请求和响应的处理更加灵活。...require-directory 请求参数检验 joi 全局错误处理 jwt token 处理 sequelize 操作数据库 mysql redis 缓存 静态文件 koa-static 请求 axios...ctx.status = 500; } } } module.exports = catchError; core/http-exception 这个构造函数的目的是创建一个特定的错误对象...通过继承 HttpException,它可以与其他 HTTP 异常类一起使用,提供统一的错误处理机制。
考虑到后面可能会添加更多的中间件,在具体处理参数之前,先将当前的代码再次进行改造下,将中间件处理单独从启动文件 app/index.js 里摘出来,新建一个 app/middlewares 目录,在该目录中我们添加...在实现错误处理和统一返回格式之前,我们再做一点小小的改造。...controller 层一上来就能写一些业务代码,最合理的还是将参数校验放在中间件中去统一处理,这里我们采用第三方插件 @hapi/joi 来处理,在 app/middlewares/ 下添加 paramValidator.js.../test'); module.exports = { scmTest }; app/schema/test.js const Joi = require('@hapi/joi'); const...我们把 age 这个参数去掉了,可以看到返回结果是我们预期的,到这为止参数校验也搞定了,@hapi/joi 更多的使用方法请 查看文档 数据库操作 当涉及到数据库操作时,我们可以在 app 下再新增一个
3.依赖注入 依赖注入简单地说就是向类中添加外部依赖项,而不是在类本身内部创建它。让我们看一个例子。...我们创建了一个 DTO,其中包含多个参数,并添加了注解来验证参数类型。...它允许您放弃回调,并通过利用异步函数来处理错误。 关键特性:它的独特之处 1.上下文对象(ctx) Koa.js 包含了一个称为 ctx 的功能,用于捕获请求和响应的详细信息。...关键特性:突出之处 1.基于配置的设计 通过使用配置对象,在 Hapi.js 中我们能够配置路由、设置和插件。...4.输入验证 输入验证是 hapi.js 的另一个关键方面。在路由的选项对象中,我们可以定义需要验证哪些输入。默认验证对象包含以下值。
我们向 Passport 提供身份验证请求,而 Passport 提供挂钩来控制身份验证成功或失败时发生的情况。...它通过使用散列或对象中提供的值扩展模板中的标签来工作。...41、Joi 地址:https://www.npmjs.com/package/joi 它是一个强大的 JavaScript 模式,描述语言和数据验证器。...它通过解析您的代码并使用自己的规则重新打印它来执行一致的样式,这些规则考虑了最大行长度,并在必要时包装代码。...在 JavaScript 数组、对象和其他数据结构上公开了许多有用的方法。
数据库工具 19.Mongoose[40] Mongoose 是一个 MongoDB 对象建模工具,设计用于在异步环境中工作。Mongoose 支持 Promise 和回调。...向Passport 提供一个身份验证请求,Passport 提供钩子来控制身份验证成功或失败时发生的操作。 22.Bcrypt[43] 它是可以帮助你生成哈希密码的库。...它的工作原理是使用 hash 或对象中提供的值在模板中展开标记。 30.Handlebars[51] 使用模板和输入对象生成 HTML 或其他文本格式。...41.Joi[64] 强大的 JavaScript schema 描述语言和数据验证器。 ?...它通过解析代码并使用自己的规则(考虑到最大行的长度)重新打印代码,以及在必要时包装代码,来强制执行一致的样式。 ? 模块打包和压缩器 51.Webpack[74] 一个著名的功能强大的模块打包器。
身份验证工具 21.Passport Passport 的目标在于通过一组策略(可扩展插件)对请求进行身份验证。...您向 Passport 提交一项身份验证请求,其会提供 hook 以控制身份验证成功或失败时各自对应的处理方式。...配置模块 24.Config 对存储在应用程序中的配置文件进行设置,可以通过环境变量、命令行参数或外部源进行覆盖及扩展。...它通过使用哈希或对象中提供的值,在模板内扩展标签。...它通过解析代码并使用自己的规则(限定最大行长)对代码进行重新输出,借此实现统一的样式;亦可在必要时对代码进行打包。
} import * as Joi from '@hapi/joi'; import { ConfigModule, ConfigService } from '@nestjs/config'; import...({ H3_APM_SERVER_URL: Joi.string().default(''), H3_LATEINOS_REPORT_URL: Joi.string()....default('development'), }), validationOptions: { allowUnknown: false, // 控制是否允许环境变量中未知的键...abortEarly: true, // 如果为true,在遇到第一个错误时就停止验证;如果为false,返回所有错误。默认为false。...PinoHttp.Options { return { customAttributeKeys: { req: '请求信息', res: '响应信息', err: '错误信息
简单的说它就是一个快速建设文档站点的工具,在简单配置好功能后,需要做的事情就剩下写好一个个 Markdown 文档,并且可以将其发布到github pages中 vuepress官网:https://vuepress.vuejs.org.../joi@15.1.1: Switch to 'npm install joi' ... └─ zepto@1.2.0 Done in 113.09s....四、在本地启动服务器 # yarn docs:dev # npm run docs:dev 当出现以下可以在浏览器中访问本机IP+端口访问 > VuePress dev server listening...中加入静态图片的问题,在md文件中可以使用下面的方式应用静态图片,下面imgs文件夹在public文件件下 目录如下 文件地址: docs/.vuepress/public/images/logo.png...md文档中: !
简单的说它就是一个快速建设文档站点的工具,在简单配置好功能后,需要做的事情就剩下写好一个个 Markdown 文档,并且可以将其发布到github pages中 vuepress官网:https://vuepress.vuejs.org.../joi@15.1.1: Switch to 'npm install joi' ... └─ zepto@1.2.0 Done in 113.09s....四、在本地启动服务器 # yarn docs:dev # npm run docs:dev 当出现以下可以在浏览器中访问本机IP+端口访问 > VuePress dev server listening...中加入静态图片的问题,在md文件中可以使用下面的方式应用静态图片,下面imgs文件夹在public文件件下 目录如下 文件地址: docs/.vuepress/public/images/logo.png... md文档中: !
这确保了在增加工作负载时能够高效处理,同时保持最高的可靠性和性能。 3、依赖注入 在NestJS中,依赖注入涉及将外部依赖添加到类中,而不是在类本身内部创建它。...例如,尝试将字符串值分配给"value"参数将触发错误,为你的应用程序添加了额外的保护层。 NestJS以其结构化和进阶的特性,为Node.js服务器端应用的开发提供了一种新鲜且高效的方法。...Hapi.js的突出特性 1、配置式设计 Hapi.js采用了配置驱动的设计,允许开发者通过配置对象轻松设置路由、定义设置和集成插件。...4、输入验证 Hapi.js非常重视输入验证。在路由的options对象中,开发者可以定义哪些输入需要验证。...Hapi.js凭借其配置式设计、强大的插件系统、内置的认证支持和严格的输入验证,为开发者提供了一个坚实的基础来构建可扩展、安全且高效的Web应用和服务。
https://sequelize.org/ 24、Joi:JavaScript对象模式验证的强大工具 在开发过程中,确保数据的完整性和遵守既定规则至关重要。...Joi为JavaScript开发者提供了全面的对象模式验证,通过在开发过程的早期捕捉无效数据,发挥着预防错误、安全漏洞和意外行为的关键作用。...Joi的优点 表达式丰富的模式语言:便于定义清晰且简洁的模式。 全面的验证器集:支持多种数据类型的验证。 自定义错误信息:提升用户体验和调试效率。 灵活的配置:可根据特定需求调整验证行为。...error) { // 处理验证错误 } else { // 处理有效的用户数据 } 强制API请求数据完整性: const schema = Joi.object({ id: Joi.number..., schema).value; 注意事项 尽管Joi在对象模式验证方面提供了许多便利,但广泛的验证可能会对应用性能产生影响,特别是在处理大型数据集时。
Hapi: 你想要一个比 Express 或 Koa 有更多“部件”的框架时选它,但它集成的东西没 Sails 那么多。...验证 Ajv: 在需要验证 JSON 时使用(例如来自一个 Web 请求的 JSON)。...Joi: 你需要验证输入并且喜欢它下面这种样式时就用它 复制代码 const schema = joi.object().keys({ id: joi.string().guid().required...(), username: joi.string().alphanum().min(8).required()}); 它不是在 JSON 中定义 schema 你正在使用 Hapi(Joi 自带它,开箱即用...Moment: 在需要解析、验证、操作和显示日期 / 时间时使用。 UUID: 需要很难破解的随机、独特的 id 时用它。
「Hapi.js 可以被用于:」 网站 HTTP 代理应用 应用程序接口服务 「Hapi.js 主要特性:」 输入验证 日志 错误处理 代码可重用性 缓存 没有外部依赖 基于配置的功能 集成框架:在 Node...有一个内置的错误捕捉器,防止网站崩溃。 使用 context 对象,该对象同时拥有请求和响应对象。 「什么时候使用 Koa.js:」 Koa.js 最适合用于创建服务器、路由、处理响应和处理错误。...Socket.io 是用来在客户端和服务器端之间创建实时双向通信的框架。要做到这一点,客户端需要在浏览器中安装 Socket.io,服务器也要集成 Socket.io 包。...在应用程序中添加“实时”能力。 支持自动重新连接 出色的速度和可靠性 即时通讯和聊天 「什么时候使用 Socket.io:」 Socket.io 是最好的基于事件的实时双向通信工具之一。...任何想要在应用中添加实时分析功能的人都应该使用它。Socket.io 对于实时游戏应用也很有用。在实时游戏中使用基本的 HTTP 或 HTTPS 协议是不可行的,因为这些文件很大,建立通信需要时间。
它支持从字符串或文件中加载模式,并且包含许多有用的验证器和错误消息。 joi:是一个强大的库,支持校验 JavaScript 对象、字符串和数字等。...它支持在模式中使用 $ref 引用,并且具有不同的验证模式(严格、宽松和非严格)。 每个库都有其独特的优点和适用场景,具体取决于您的需求和项目的要求。...ajv和joi是两个常见的JavaScript JSON Schema 库,它们在社区生态、用法和API设计方面都有一些区别。...相比之下,joi更适合于验证JavaScript对象、字符串和数字等数据类型,但它的API设计非常直观,可以轻松地定义和验证复杂的数据结构。...如果主要需要验证JSON数据的结构且考虑性能,那么ajv可能是更好的选择。如果需要验证JavaScript对象、字符串和数字等更多的数据类型,那么joi可能是更好的选择。