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
不仅于scheme对象 joi 不仅仅作用于scheme对象,而且还可以单独使用,比如: Joi.string().validate(666666); //error: ValidationError...().invalid(5).validate(5); // error 允许是任何类型: Joi.any().validate() // pass 如果需要校验对象的子对象,那么Joi的描述也可以作为了一个子对象...().required() }); var schemeCD = Joi.object({ C: Joi.string().required(), D: schemeAB //可以作为子对象...自家的Joi 当然要无缝对接起来 var Hapi = require('hapi'); var Joi = require('Joi'); var server = new Hapi.Server...Joi 的更多用法可以参考文档:https://github.com/hapijs/joi/blob/v8.0.5/API.md
不仅于scheme对象 joi 不仅仅作用于scheme对象,而且还可以单独使用,比如: Joi.string().validate(666666); //error: ValidationError...().invalid(5).validate(5); // error 允许是任何类型: Joi.any().validate() // pass 如果需要校验对象的子对象,那么Joi的描述也可以作为了一个子对象...().required() }); var schemeCD = Joi.object({ C: Joi.string().required(), D: schemeAB //可以作为子对象...自家的Joi 当然要无缝对接起来 var Hapi = require('hapi'); var Joi = require('Joi'); var server = new Hapi.Server...Joi 的更多用法可以参考文档:https://github.com/hapijs/joi/blob/v8.0.5/API.md 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn
前言 在写后端的时候,我们一般提倡配置文件分离. 所以.env就可以很方面来维护我们的环境变量, 封装对应的工厂函数也能组合更复杂的配置!...其他不多说,往下可以看看我的配置分离思路~~ 实战 安装 @nestjs/config : 基于dotenv 封装的Nest配置中心 joi : 一个很灵活的schema校验工具 @types/hapi...__joi : joi的typescript声明 # @nestjs/config 内置了dotenv yarn add @nestjs/config joi yarn add -D @types/hapi...Joi 这里只用到了joi的基础语法,比如默认转换格式,添加默认值....const configService = app.get(ConfigService); // configService.get可以获取到我们封装的配置对象或者系统变量!
老王:因为 Koa 比较轻量,几乎没有内置任何的额外功能。也是因为这个原因,Koa 的灵活度是很高的,喜欢折腾的人可以尝试下 小王:又轻量又几乎没有任何额外功能?那为什么不用原生Node?...10001, 'name 是必须的')) ,我希望我在 controller 层一上来就能写一些业务代码,最合理的还是将参数校验放在中间件中去统一处理,这里我们采用第三方插件 @hapi/joi 来处理.../test'); module.exports = { scmTest }; app/schema/test.js const Joi = require('@hapi/joi'); const.../joi 更多的使用方法请 查看文档 数据库操作 当涉及到数据库操作时,我们可以在 app 下再新增一个 service 目录。...另外再添加一个 model 目录,用来定义数据库表结构,具体的这里暂时不介绍了。 目前为止目录结构 总结 其他更多的公共逻辑都可以放在中间件层面去做,例如登录校验、权限校验等。
Hapi: 你想要一个比 Express 或 Koa 有更多“部件”的框架时选它,但它集成的东西没 Sails 那么多。...(), username: joi.string().alphanum().min(8).required()}); 它不是在 JSON 中定义 schema 你正在使用 Hapi(Joi 自带它,开箱即用...还要考虑你的团队是否熟悉 Promise。现在大多数开发者应该都很熟悉了。...ESlint: 你需要一个 linter 来自动查找(和修复)代码中的语法和模式问题时选它。 调试 目前 Node 的原生调试已经够用了,我建议用原生功能就行。...几年前一些额外的 npm 模块还能有些帮助,有的特定场景可能用得着;但是现在有了足够的原生支持,如果你没什么疯狂的调试需求就最好省掉额外的依赖项。 小结 挑选模块可能会很费事,但用些技巧就能事半功倍。
使用 Hapi,我们可以构建功能强大、可扩展的应用程序,而且开销最小,而且功能齐全,开箱即用。...它可以用于 HTML、配置文件、源代码——任何东西。它通过使用散列或对象中提供的值扩展模板中的标签来工作。...41、Joi 地址:https://www.npmjs.com/package/joi 它是一个强大的 JavaScript 模式,描述语言和数据验证器。...ESLint 是完全可插拔的,每一条规则都是一个插件,我们可以在运行时添加更多。...我们可以传递一个选项对象来影响它产生的颜色类型。
模块,可以拿来即用!...# https://github.com/iamolegga/nestjs-pino yarn add nestjs-pino # pino 日志美化工具(用于开发模式美滋滋,看效果图的开发模式) yarn...: Parameters; // 就是可以设置排除不作用的路由区域,具体可以看下官方文档的中间件部分! forRoutes?...: any[]; // 是否要注入一些provider提供的功能,我们会用到(配置中心), // 用inject必然会依赖module,也就是import,定义里面也pick了ModuleMetadata...} import * as Joi from '@hapi/joi'; import { ConfigModule, ConfigService } from '@nestjs/config'; import
https://sequelize.org/ 24、Joi:JavaScript对象模式验证的强大工具 在开发过程中,确保数据的完整性和遵守既定规则至关重要。...Joi为JavaScript开发者提供了全面的对象模式验证,通过在开发过程的早期捕捉无效数据,发挥着预防错误、安全漏洞和意外行为的关键作用。..., schema).value; 注意事项 尽管Joi在对象模式验证方面提供了许多便利,但广泛的验证可能会对应用性能产生影响,特别是在处理大型数据集时。...GraphQL的优点 客户端驱动:客户端可以精确指定所需数据,减少数据的过度和不足获取。 强类型系统:通过模式保证了数据的完整性和类型安全。 灵活性:能够适应多种数据源和应用架构。...Ramda的优点 不可变性:鼓励使用纯函数,避免副作用,提升代码的可预测性和易测试性。 简洁性:函数式风格通常导致代码更加简洁、易读。 可组合性:函数可以轻松组合,创建复杂的逻辑。
您向 Passport 提交一项身份验证请求,其会提供 hook 以控制身份验证成功或失败时各自对应的处理方式。...模板语言 29.Mustache Mustache 是一种无逻辑模板语法,适用于 HTML、配置文件以及源代码等几乎一切场景。它通过使用哈希或对象中提供的值,在模板内扩展标签。...ESLint 具备全面的可插入特性,每项规则对应一款插件,供您在运行时添加更多内容。...提供极高的可配置度与多种兼容模式。...项目链接: https://www.npmjs.com/package/marked 72.Randomcolor 一款用于生成美观随机颜色的小型脚本,您可以通过选项对象调整其产生的颜色类型。
8.Hapi[26] Hapi 最初用于 Express 框架。使用 Hapi,你可以以最小的开销和完全开箱即用的功能构建功能强大、拓展性强的应用程序。...向Passport 提供一个身份验证请求,Passport 提供钩子来控制身份验证成功或失败时发生的操作。 22.Bcrypt[43] 它是可以帮助你生成哈希密码的库。...模板语言 29.Mustache[50] Mustache 是一种无逻辑的模板语法。它可以用于 HTML,配置文件,源代码等任何东西。它的工作原理是使用 hash 或对象中提供的值在模板中展开标记。...ESLint 是完全插件化的,每个规则都是一个插件,你可以在运行时添加更多内容。 50.Prettier[73] Prettier 是一种固执己见的代码格式化程序。...你可以传递选项对象从而决定其产生的颜色类型。 73.Pluralize[97] 该模块使用预先定义的规则列表,按顺序应用这些规则给指定单词单数或复数。
Hapi 简介:Hapi 是一个用于构建应用程序和服务的 Node.js 框架,它注重配置和插件系统,能够构建稳定、安全的 web 服务。...特点: 配置驱动开发:使用配置对象来定义服务器设置、路由、插件等。...例如,定义一个简单的路由配置: const Hapi = require('hapi'); const server = new Hapi.Server({ port...攒钱不是吝啬,可以投资自己提升自己 需求规划: 首页(banner、功能区、意见反馈入口)小程序登录授权&邮箱登录&手机号登录 添加/编辑账单(涉及收入/支出、消费类型、时间、金额、备注等等)api 新增自定义消费类型...ctx.status = 500; } } } module.exports = catchError; core/http-exception 这个构造函数的目的是创建一个特定的错误对象
既可以当做博客系统、文档系统,项目介绍的系统,还有丰富的插件使用。 要用到的域名: http://{github pages的域名} (github pages)的域名。...简单的说它就是一个快速建设文档站点的工具,在简单配置好功能后,需要做的事情就剩下写好一个个 Markdown 文档,并且可以将其发布到github pages中 vuepress官网:https://vuepress.vuejs.org...[1/4] Resolving packages... warning @vuepress/theme-blog > @vuepress/plugin-pwa > workbox-build > @hapi.../joi@15.1.1: Switch to 'npm install joi' ... └─ zepto@1.2.0 Done in 113.09s....}.git" master:gh-pages cd - 关于主题和插件 修改配置文件: docs\.vuepress\config.js 添加主题: theme: 'vuepress-theme-note
既可以当做博客系统、文档系统,项目介绍的系统,还有丰富的插件使用。 要用到的域名: http://vuepress.xgss.net (github pages)的域名。...简单的说它就是一个快速建设文档站点的工具,在简单配置好功能后,需要做的事情就剩下写好一个个 Markdown 文档,并且可以将其发布到github pages中 vuepress官网:https://vuepress.vuejs.org...[1/4] Resolving packages... warning @vuepress/theme-blog > @vuepress/plugin-pwa > workbox-build > @hapi.../joi@15.1.1: Switch to 'npm install joi' ... └─ zepto@1.2.0 Done in 113.09s....github.com:funet8/vuepress.xgss.net.git" master:gh-pages cd - 关于主题和插件 修改配置文件: docs\.vuepress\config.js 添加主题
应粉丝的要求,改造一下官方的答题小程序,可以实现自己添加题库 [在这里插入图片描述] 解题的思路的话是先安装模板,然我我们在一步步的分析一下模板做了什么工作,需要做哪些改造。...[在这里插入图片描述] 分享信息 [在这里插入图片描述] 这里需要注意的是分享是对象类型,我们需要先加字段,然后再往对象里添加属性 [在这里插入图片描述] 依次按照外部数据源的字段,给对象添加属性 [...怎么做这一步呢,就需要看他的源码 新增练习册方法 我们首先查看一下他的云函数是如果写的,在云函数旁边的查看详情按钮可以看到具体代码 [在这里插入图片描述] const Joi = require('joi...还有一个点就是出参的问题,一般你调试成功之后直接出参隐射就可以,省下一个个参数添加了。...我的建议是看是否官方后续会把题库开放了,到时候我们直接使用模板就好了,改造也不是不可以,但是花的精力就比较大一些。
,所有这些都隐藏至你的业务逻辑之后; 组件化:功能被表示为一组可以一起组成微服务的插件。...链接的调用按顺序执行,但不是按顺序执行,因此它们的结果可以按任何顺序返回。 扩展模式以增加新功能 模式使您可以轻松扩展功能。您只需添加更多模式,而不是添加if语句和复杂逻辑。...让我们通过添加强制整数运算的能力来扩展加法动作。为此,您需要向消息对象添加一个新属性 integer:true。...很多时间,提供一种可以让你不需要全盘修改现有 Action 函数的代码即可增加它功能的方法是很有必要的,比如,你可能想为某一个消息增加更多自定义的属性验证方法,捕获消息统计信息,添加额外的数据库结果中,...为了演示初始化,让我们向 math 插件添加简单的自定义日志记录,当插件启动时,它打开一个日志文件,并将所有操作的日志写入文件,文件需要成功打开并且可写,如果这失败,微服务启动就应该失败。
注解,如@IsNumber()和@IsString(),充当守护者,确保每个参数都遵循指定的类型。例如,尝试将字符串值分配给"value"参数将触发错误,为你的应用程序添加了额外的保护层。...Hapi.js的突出特性 1、配置式设计 Hapi.js采用了配置驱动的设计,允许开发者通过配置对象轻松设置路由、定义设置和集成插件。...,并且可以通过options键向每个插件传递选项。...4、输入验证 Hapi.js非常重视输入验证。在路由的options对象中,开发者可以定义哪些输入需要验证。...它的路由系统旨在表达性强且功能强大,使开发者能够轻松定义和管理应用的各种终端。 Adonis.js的亮点特性 1、全栈MVC框架 Adonis.js遵循MVC(模型-视图-控制器)架构模式。
管道(Pipe)的使用 Nestjs 中内置了下列的9个管道,利用这些管道可以轻松的验证路由参数、查询参数和请求正文是否合法,下面通过两个例子一起看一下管道的使用。...,此时客户端在传递非数字类型的ID时并不会收到合理的提醒,这样很容易造成服务端业务逻辑的异常,有入库的操作的话还会造成垃圾数据。...所以可将 ParseIntPipe 管道类直接添加到 @Param() 装饰器的第二位参数,如下图: @Controller('users') export class UsersController...age: Joi.number().required(), gender: Joi.bool().required(), }); 定义完 schema 后可以使用 nest g pi joi-validation...创建一个公共的管道,在 transform 函数中使用已经注入的ObjectSchema 对象提供的 validate 函数对请求参数 value 做验证,当验证不通过是抛出合理的异常,反之通过。
8.Hapi[26] Hapi 最初用于 Express 框架。使用 Hapi,你可以以最小的开销和完全开箱即用的功能构建功能强大、拓展性强的应用程序。...向Passport 提供一个身份验证请求,Passport 提供钩子来控制身份验证成功或失败时发生的操作。 22.Bcrypt[43] 它是可以帮助你生成哈希密码的库。...模板语言 29.Mustache[50] Mustache 是一种无逻辑的模板语法。它可以用于 HTML,配置文件,源代码等任何东西。它的工作原理是使用 hash 或对象中提供的值在模板中展开标记。...41.Joi[64] 强大的 JavaScript schema 描述语言和数据验证器。 ?...ESLint 是完全插件化的,每个规则都是一个插件,你可以在运行时添加更多内容。 50.Prettier[73] Prettier 是一种固执己见的代码格式化程序。