modelman
v0.1.4
Published
This is a generic model and validation library.
Downloads
9
Readme
modelman
modelman(模型侠)是一个模型类库,可以帮助你轻松的在各种数据格式之间进行转换。比如把modelman的模型转化为mongoose的模型,或者把modelman的模型转化为前端表单模型。
Installation
This is a Node.js module available through the npm registry.
Before installing, download and install Node.js. Node.js 8.0 or higher is required.
Installation is done using the
npm install
command:
$ npm install modelman
Importing
// Using Node.js `require()`
const modelman = require('modelman');
// Using ES6 imports
import modelman from 'modelman';
ModelmanTypes
Modelman兼容大部分的 mongoose 的数据类型。Modelman目前支持的数据类型如下:
类型名称 | 描述 ---|--- Any | 任意数据类型 Array | 普通数组对象 Boolean | 布尔值 Buffer | Buffer对象 ChinaId | 中国身份证号类型 Date | 日期对象 Email | 邮箱类型 Float | 浮点数 Map | Map对象 Mixed | 混合类型,可以放任意类型数据 Number | 普通数字 Object | 普通对象 ObjectId | ObjectId, mongodb的唯一id类型 Password | ispro.password 类型 String | 普通字符串 Timestamp | 时间戳类型 Url | 网址类型 Username | ispro.username 类型
API
调用 | 说明 ---|--- myModel.assign(fields: object): void | 为这个模型定义字段以及字段的类型。 myModel.setData(object: object): myModel | 为某个字段设置值,可以传入一个对象设置多个值。 myModel.to.json(): JSON | 转化为键值对的json对象。 myModel.to.mongoose(): JSON | 转化为mongoose的model的数据格式。 myModel.validator.all(): JSON | 校验全部的数据,并返回校验失败的字段名和字段显示名。 myModel.validator.part(): JSON | 只校验有效值的数据,并返回校验失败的字段名和字段显示名。
一个例子
const modelman = require('modelman');
//创建一个新的modelman的模型
let m = new modelman.Model({
name: 'article',
displayName: '文章'
});
//为这个模型定义字段以及字段的类型。
m.assign({
serialNumber: { n: '文章序号', type: 'Number' }, //文章序号
categoryId: { n: '所属分类对象', type: 'ObjectId', ref: 'Category' }, //所属分类对象
userId: { n: '所属用户id', type: 'ObjectId', ref: 'User' }, //所属用户id
type: { n: '文章类型', type: 'Number', r: true }, //文章类型
title: { n: '文章标题', type: 'String', r: true }, //文章标题
keywords: { n: '文章关键字', type: 'Array', r: true }, //文章关键字
description: { n: '文章摘要', type: 'String', min: 10, max: 200, r: true }, //文章摘要
poster: { n: '文章封面', type: 'Url', r: true }, //poster
mdContent: { n: '文章markdown内容', type: 'Stirng', r: true }, //文章markdown内容
htContent: { n: '文章markdown内容', type: 'String', r: true, f: false }, //文章html内容
topType: { n: '置顶方式', type: 'Number', d: 0, r: true }, //置顶方式 0、无置顶 1、主要置顶 2、次要置顶
likeCount: { n: '点赞数量', type: 'Number', d: 0, f: false }, //点赞数量
commentCount: { n: '评论数量', type: 'Number', d: 0, f: false }, //评论数量
visNumber: { n: '浏览数量', type: 'Number', d: 0, f: false }, //评论数量
createTime: { n: '创建时间', type: 'Timestamp', t: true, f: false }, //创建时间
updateTime: { n: '更新时间', type: 'Timestamp', t: true, f: false } //更新时间
});
//为某个字段设置值,可以传入一个对象设置多个值。
m.setData({ title: '这是一篇文章!' });
//转化为键值对的json对象。
let json = m.to.json();
//转化为mongoose的model的数据格式。
let mongooseModel = m.to.mongoose();
console.log('\n=> 输出json格式 : \n')
console.log(JSON.stringify(json, null, 2));
console.log('\n=> 输出mongoose的模型 : \n')
console.log(mongooseModel);
console.log('\n=> 校验数据,并返回校验失败的字段名和字段显示名: \n')
console.log(m.validator.all());
前端例子
结合vue使用modelman的模型自动渲染表单组件。
github地址:https://github.com/lisniuse/vue-modelman-example
assign方法参数说明
assign方法接受一个对象作为参数,这个对象中值的参数说明如下:
参数名 | 说明
---|---
type
| modelman的数据类型,可以用modelman.type[type]来赋值type,也可以直接使用类型的字符串形式,比如'String'。
n
或者 name
| 表示字段的显示名称,可以是中文也可以是英文,比如它可以表示表单的label。
r
或者 required
| 表示是否是必填项目。
f
或者 formField
| 表示是否是前端的表单的字段类型,比如某条数据的创建时间(createTime)就不属于表单字段类型。
t
或者 tableField
| 表示是否是前端的列表或者表格需要展示的字段类型。
d
或者 default
或者 defaultValue
| 表示该字段的默认值。
p
或者 placeholder
| 表示该字段的默认提示文本。
min
| 在number中用于表示最小值限制,在字符串中用于表示最小字符串长度限制。
max
| 在number中用于表示最大值限制,在字符串中用于表示最大字符串长度限制。
ref
| 主要是mongoose的使用类型,表示关联。
待完成
一、目前只支持的mongoose的模型的转化,还有很多数据库的模型未被支持:
- Sqlite
- PostgreSQL
- Oracle
- MySQL
- SQL Server
二、目前只支持简单的类型和空判断,还需要更完整的校验支持。
其他
欢迎贡献代码!