模型注册
调用方式:app.model
单个注册
开发者通过调用该接口注册数据模型,具体调用方式如下所示:
const app = require('ibird-core');
app.model(obj);
配置对象obj
的可选参数如下所示:
- name:模型注册名称,String类型,必填参数,一般为英文,需保证全局唯一
- displayName:模型显示名称,String类型,可选参数
- schema:数据模型部分,Schema类型,必填参数,即符合mongoose模型定义规范的数据模型
- logicallyDeleted:覆盖全局的逻辑删除配置
- collection:数据库集合名称,String类型,可选参数,默认为模型注册名称+小写字母s,例如模型注册名称为“user”时,集合名称为“users”
- skipInit:是否跳过mongoose模型初始化操作,Boolean类型,可选参数,默认为false
- defaultRouteOverrite:默认路由配置
- defaultRouteHooks:默认路由钩子
对于默认路由,开发者可以通过指定参数defaultRouteOverrite
参数对其进行配置,例如不生成路由、不生成指定路由和覆盖默认路由等。该参数接收一个对象,对象的具体配置项如下所示:
app.model({
name: 'TestModel',
displayName: '测试模型',
...,
defaultRouteOverrite: {
list: false | Function,// 列表查询接口,传入false时不生成该接口,当传入参数为Function时,需要完全自行处理相关返回
one: ...,// 单个查询接口,同上
id: ...,// ID查询接口,同上
create: ...,// 新增接口,同上
update: ...,// 修改接口,同上
remove: ...// 删除接口,同上
},
defaultRouteHooks: {
list: {
pre: Function,//执行前回调函数,传入参数为对象类型,包括ctx和query两个参数,返回Promise对象
post: Function//执行后回调函数,传入参数为对象类型,包括ctx和data两个参数,返回Promise对象
// ctx:koa上下文对象
// query:模型查询对象
// data:返回数据
},
one: { ... },
id: { ... }
}
});
批量注册
在模型注册时传递一个数组即可实现批量注册的功能:
app.model([
{
name: 'User',
schema: new Schema({
username: String,
password: String
})
},
{
name: 'Blog',
schema: new Schema({
title: String,
author: String,
body: String,
comments: [{body: String, date: Date}],
date: {type: Date, default: Date.now},
hidden: Boolean,
meta: {
votes: Number,
favs: Number
}
}),
collection: 'MyBlog',
skipInit: true
}
]);
文件夹挂载
可以指定一个存放所有模型的文件夹,ibird
在启动的时候会递归该文件夹并挂载所有.js
后缀且模块导出有效的文件。
// 注册数据模型
app.modelDir(path.resolve(__dirname, 'src/schema'));