Mabolo icon indicating copy to clipboard operation
Mabolo copied to clipboard

使用 Joi 替代现有的 Schema 定义

Open jysperm opened this issue 10 years ago • 0 comments

https://github.com/hapijs/joi

一个示例:

Mabolo = require '../../index'
Joi = require 'joi'

Account = Mabolo.model 'Account', Joi.object
  username: Joi.string().required().token()
  email: Joi.string().required().email()

  hasedPassword: Joi.string()
  passwordSalt: Joi.string()

  groups: Joi.array().items Joi.string().allow ['root', 'admin']
  preferences: Joi.object()

  createdAt: Joi.date().default Date.now, 'createdAt'

Joi 的优势:

  • 更多内建方法,如 email, token, mix, max 等
  • 更完备的类型转换,可以将数据转换到合法的数据类型,例如字符串形式的数字和日期
  • 支持嵌套和引用,可以构建出更复杂的 Schema

计划上还会兼容原来的 Schema 定义语法,因为在 Schema 比较简单的情况下,原有的语法写起来方便一些。

Joi 不支持自定义规则,这部分我计划实现一个类似中间件的机制,来支持自定义或异步的验证逻辑。

jysperm avatar Nov 22 '15 08:11 jysperm