模型注册

调用方式: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'));

results matching ""

    No results matching ""