展开

关键词

使用joi验证数据模型

我们用nodejs实现一些功能时,往往需要对用户输入的数据进行验证。 然而,验证是一件麻烦的事情,很有可能你需要验证数据类型,长度,特定规则等等,在前端做表单验证时,我们常用的做法是使用正则,正则表达式也许可以一步到位,但是他只会给你true or false,如果想要知道数据不符合哪些条件时 (), Joi.date(), Joi.func(), Joi.number(), Joi.object(), Joi.string() 更多玩法 数字 + 特定的字符串: Joi.number().allow console.log(output); //pass Joi提供的校验条件不够用? server.start(function(err) { if (err) throw err; console.log('Server running...'); }); 就是如此简单的配置就即可完成数据验证

1.3K00

使用joi验证数据模型

本文作者:IMWeb zzbozheng 原文出处:IMWeb社区 未经同意,禁止转载 我们用nodejs实现一些功能时,往往需要对用户输入的数据进行验证。 然而,验证是一件麻烦的事情,很有可能你需要验证数据类型,长度,特定规则等等,在前端做表单验证时,我们常用的做法是使用正则,正则表达式也许可以一步到位,但是他只会给你true or false,如果想要知道数据不符合哪些条件时 (), Joi.date(), Joi.func(), Joi.number(), Joi.object(), Joi.string() 更多玩法 数字 + 特定的字符串: Joi.number().allow console.log(output); //pass Joi提供的校验条件不够用? server.start(function(err) { if (err) throw err; console.log('Server running...'); }); 就是如此简单的配置就即可完成数据验证

45750
  • 广告
    关闭

    【玩转 Cloud Studio】有奖调研征文,千元豪礼等你拿!

    想听听你玩转的独门秘籍,更有机械键盘、鹅厂公仔、CODING 定制公仔等你来拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Node 如何在 Controller 层进行数据校验

    由于 Controller 层是服务端中与客户端数据交互的最顶层,秉承着 Fail Fast 的原则,肩负着数据过滤器的功能,对于不合法数据直接打回去,如同秦琼与尉迟恭门神般威严。 以下都是常见的数据校验,本文讲述如何对它们进行校验: required/optional 基本的数据校验,如 number、string、timestamp 及值需要满足的条件 复杂的数据校验,如 IP 各种服务编程语言都对规范进行了实现,如 go、java、php 等,当然伟大的 javascript 也有,如不温不火的 ajv[2]。 const schema = Joi.object({ id: Joi.number().required(), name: Joi.number().required(), email: /github.com/ajv-validator/ajv [3] joi: https://github.com/sideway/joi [4] joi-router: https://github.com

    50510

    如何选择正确的Node框架:Express,Koa还是Hapi?

    流行度快速增长的部分原因是Node.js允许开发人员在应用程序的客户端和服务端部分使用相同的语言:JavaScript。 开发人员更专注于业务,而不是花时间构建基础架构。配置驱动的模式,区别于传统的web服务操作。他还有比一个独特功能,能够在特定的IP上创建服务,具有类似的功能onPreHandler。 基于配置的伪中间件 提供缓存,身份验证和输入验证 提供基于插件的扩展架构 提供非常好的企业插件,如joi,yar,catbox,boom,tv和travelogue 缺点 代码结构复杂 插件不兼容,只能使用指定的插件如 :catbox joi boom tv good travelogue等 端点是手动创建的,必须手动测试 重构是手动的 性能 017年对Node框架的研究表明hapi相对于其他框架的表现最差 [ 它适用于常规请求和CORS请求 Joi:JavaScript对象的对象模式描述语言和验证 Hapi-rbac 用户的访问权限控制 Blankie 足够灵活的白名单作机制 Cryptiles 加密库 社区

    63040

    分析绕过一款适合练手的云 WAF

    M.url_args_attack_check() then elseif _M.post_attack_check() then else return end` 这个一个多条件判断语句 ,一旦满足前面的条件就不再进行后面的检测。 另外有趣的是,在 blackip.rule 里面,把 8.8.8.8 放置在黑名单里面,但这并没有什么用,IP 白名单已经跳出多条件判断,不会再进行 IP 黑名单检测。 :from\W+information_schema\W)` 绕过姿势一:%0a 由于使用的是 joi 来修饰,我们可以用 %0a 来进行绕过。 /sql.php? 绕过姿势二:%u 特性 主要利用 IIS 服务支持 unicode 的解析 /sql.aspx?

    73200

    快速搭建node.js新项目?看这篇就够了!

    6.1 安装 joi 包,为表单中携带的每个数据项,定义验证规则: npm install joi 6.2 安装 @escook/express-joi 中间件,来实现自动对表单数据进行验证的功能: npm i @escook/express-joi 6.3 新建 /schema/user.js 用户信息验证规则模块,并初始化代码如下: const joi = require('joi') ​ /** const username = joi .string() .alphanum() .min(1) .max(10) .required() // 密码的验证规则 const password = joi .string() .pattern(/^[\S]{6,12}$/) .required() ​ // 向外共享登录表单的验证规则对象 exports.reg_login_schema 导入验证表单数据的中间件 const expressJoi = require('@escook/express-joi') // 2.

    29863

    挑选 npm 模块很费事?掌握这些技巧就能事半功倍!

    验证 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 自带它,开箱即用 ) 身份验证 Passport: 需要为你的网站或 API 使用身份验证中间件时用它。 Knex 是一个生成 SQL 的查询构建

    18821

    解决:node后端接收到axios的post请求体竟为空?

    ---- BUG情境还原: 先介绍一下我后端node使用到的包: "@escook/express-joi": "^1.1.1", //进行表单验证相关包 "cors": "^2.8.5", //解决请求跨域问题相关包 "express": "^4.17.2",//node.js的web应用框架 "joi": "^17.6.0", //定义表单验证规则的包 "mysql": "^2.18.1" //数据库相关包 并使用了cors解决前端请求跨域问题,并配置了joi的表单验证,每次向api提交的表单数据,都会先经过表单验证的中间件,其中验证规则设置了username和password都是required 前端vue 将JSON字符串格式的参数发给服务,确实应该也没什么问题呀? 于是我就重新回到服务的配置代码上来,显然,应该是服务无法解析request请求的请求体body中JSON字符串的数据。 服务控制台打印的req.body对象 ? ---- 总结: 到这里,问题就解决啦!

    42042

    不容错过的 Node.js 项目架构

    如果您需要帮助调整 Node.js 项目架构,只需给我发一封信 sam@softwareontheroad.com。 目录 目录结构 ? 三层架构 ? 服务层 ? Pub/Sub 层 ️️️️?️️ 对于一些重复的任务,然后从 Node.js 服务上对它自己进行调用,显然这不是一个好的主意。 ? 图片描述 ☠️ 不要将您的业务逻辑放入控制中!! route.post('/', async (req, res, next) => { // 这应该是一个中间件或者应该由像 Joi 这样的库来处理 // Joi 是一个数据校验的库 结论 我们深入研究了经过生产测试的 Node.js 项目结构,以下是一些总结的技巧: 使用 3 层架构。 不要将您的业务逻辑放入 Express.js 控制中。 切勿泄漏您的密码、机密和 API 密钥,请使用配置管理。 将您的 Node.js 服务配置拆分为可以独立加载的小模块。

    77130

    Meatier — 内容丰富的类Meteor框架

    客户端验证 Simple Schema Joi 清晰的API,尽管这个包挺大 数据库钩子 Collections2 GraphQL GraphQL 对于小应用来说太重了 (但是内容丰富) 表单 AutoForm redux-form 非常棒的状态跟踪,与 react 完美结合 客户端缓存 Minimongo redux 加分项,日志,时光旅行,撤销功能 Socket 服务 DDP-server socketcluster

    23590

    再谈 API 的撰写 - 总览

    在 github 里逛了半天,最后能落入法眼的也只有 joi 和 json schema 可用。 而 joi 是 hapi 提供的 validator,接口很人性化,相同的 schema,描述起来代码量只有前者的 1/3: ? swagger 是一种 API 描述语言,可以定义客户端和服务之间的协议。swagger doc 可以生成 API 的文档和测试UI,比如说: ? 一套 API 系统可能包含多台服务,所以日志需要集中收集,处理和可视化。一般而言,我们可以用 ELK,或者第三方的服务。 今天先讲这么多,下次谈谈如何架构一个 API 系统。

    59170

    从零开始的 Nest.js

    app.service作为逻辑处理模块,app.controller作为控制模块。 路由 nest 中的路由是位于一个被Controller装饰的类中,每个路由是该类中的一个方法,该方法被Get``Post等装饰装饰,而返回的值则是响应对象。 随后在每个路由上,你也可以添加一些装饰在路由上,swagger 会生成描述等。 在控制对象上加上 ApiTags装饰,即可对不同控制加以分组。 请求过滤 nest 同样提供了强大了请求过滤,你可以使用之前为 swagger 准备的 Dto 模型,在此基础上加以扩展,即可对请求体的模型进行验证验证通过 nest 的管道(Pipe)。 首先安装 class-validator,之后 main.ts 中引入全局管道 ValidationPipe,ValidationPipe是 nest 提供的一个类似于Joi之类的 Schema 验证

    14220

    日常用得到的 Koa 优雅代码指南

    浏览里访问 http://localhost:8082 已经可以正常响应了 ? const list = async ctx => { const data = '' ctx.utils.assert(data, ctx.utils.throwError(10001, '验证码失效 /test'); module.exports = { scmTest }; app/schema/test.js const Joi = require('@hapi/joi'); const list = { query: Joi.object({ name: Joi.string().required(), age: Joi.number().required() 在请求参数中,我们把 age 这个参数去掉了,可以看到返回结果是我们预期的,到这为止参数校验也搞定了,@hapi/joi 更多的使用方法请 查看文档 数据库操作 当涉及到数据库操作时,我们可以在 app

    21520

    再谈 API 的撰写 - 架构

    在 再谈 API 的撰写 - 总览 里我们谈到了做一个 API 系统的基本思路和一些组件的选型,今天谈谈架构。 部署 首先要考虑的架构是部署的架构。部署的方案往往会深刻影响着系统的结构。 显而易见地,方案一和方案二的软件架构也会有所不同。 authentication:用户身份验证。这个不多说,主要是处理 "Authorization" 头。对于不需要验证的 API,可以跳过这一步。 做 API,身份验证一定不要使用 cookie/session based authentication,而应该使用 token。 其接受一个参数为 (req, res, next) 的 action function(也可以是多个) 其对 body 提供一个 joi validator(除 body 外,也可以对 header,param

    84370

    【TS】634- 让人眼前一亮的 10 大 TS 项目

    利用 n8n 你可以方便地实现当 A 条件发生,触发 B 服务这样的自动工作流程。 ? IFTTT 是一个被称为 “网络自动化神器” 的创新型互联网服务理念,它很实用而且概念很简单。 IFTTT 全称是 If this then that,意思是如果满足 “this” 条件,则触发执行 “that” 动作。 amis 渲染架构图 ? 它支持以下特性: 使创建表单和集成更加便捷 非受控表单校验 以性能和开发体验为基础构建 迷你的体积而没有其他依赖 遵循 html 标准进行校验 与 React Native 兼容 支持 Yup, Joi 然而,在服务端,虽然有很多优秀的库、helper 和 Node 工具,但是它们都没有有效地解决主要问题 —— 架构

    43540

    构建下一代 HTTP API - 零成本抽象做输入输出的校验和正规化

    软件架构领域的先驱者 Mary Shaw 在她的《软件架构》一书里提到,一个系统只有 10% 的代码用于其看得见的目的,而剩下的逻辑都花在处理输入输出,数据校验,数据结构的维护和其它的琐事。 史无前例成功把运行时的诸多内存安全检查和处理放在编译时完成),async/await 的状态机实现(精妙绝伦,性能卓绝且使用如 typescript 般丝滑),以及近乎 python/elixir 使用体验的迭代( 之前做 UAPI(见:再谈 API 的撰写 - 架构)时,我通过把 joi 库(nodejs 的一个 data validator 库)融进了 route API,使得开发者可以在定义路由的时候就定义好 大多数时候,对于 API 服务来说,生产环境下,只需要验证输入,而不需要验证输出,所以你不需要使用 Response validator,它会带来额外的不必要的开销。 spec 和解析

    17910

    分享 73 个让你事半功倍的 NPM 包

    9、Sails 地址:https://www.npmjs.com/package/sails Sails 是 Node.js 最流行的 MVC 框架,支持现代应用程序的要求:具有可扩展、面向服务架构的数据驱动 我们向 Passport 提供身份验证请求,而 Passport 提供挂钩来控制身份验证成功或失败时发生的情况。 这个包允许我们解码、验证和生成 JWT。 验证者 40、Validator 地址:https://www.npmjs.com/package/validator 这是一个非常方便的字符串验证库。 41、Joi 地址:https://www.npmjs.com/package/joi 它是一个强大的 JavaScript 模式,描述语言和数据验证

    20820

    一篇文章构建你的 NodeJS 知识体系(W字长文)

    验证参数 const memberSchema = Joi.object().keys({ password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/), birthyear: Joi.number().integer().min(1900).max(2013), email: Joi.string().email(), }); function 为了避免每个路由中繁琐的验证编码, 您可以使用基于 JSON 的轻量级验证架构,比如 jsonschema 或 joi 支持黑名单的 JWT 当使用 JSON Web Tokens(例如, 通过 Passport.js 跨域认证 一般流程 用户向服务发送用户名和密码 服务验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等 服务向用户返回一个 session_id,写入用户的 Cookie 这种方案的优点是架构清晰,缺点是工程量比较大。另外,持久层万一挂了,就会单点失败。 另一种方案是服务索性不保存 session 数据了,所有数据都保存在客户端,每次请求都发回服务

    3010

    73个强无敌的NPM软件包

    www.npmjs.com/package/@hapi/hapi 9.Sails Sails 是目前最具人气的 Node.js MVC 框架,可支持现代应用的一大核心需求:构建起数据驱动型 API,并辅以可扩展且面向服务的架构 身份验证工具 21.Passport Passport 的目标在于通过一组策略(可扩展插件)对请求进行身份验证。 您向 Passport 提交一项身份验证请求,其会提供 hook 以控制身份验证成功或失败时各自对应的处理方式。 项目链接: https://www.npmjs.com/package/faker ✅ 验证工具 40.Validator 便捷的字符串验证与消毒库。 项目链接: https://www.npmjs.com/package/validator 41.Joi 面向 JavaScript 的强大 schema 描述语言与数据验证

    35410

    扫码关注腾讯云开发者

    领取腾讯云代金券