egg-sequelize 原理, 访问 sequelize 的方式, 支持情况

主要功能

egg-sequelize 是 Egg.js 的 Sequelize 插件,主要作用是:

  1. 集成 Sequelize ORM 到 Egg.js 框架中

  2. 提供模型自动加载机制

  3. 支持多数据源配置

  4. 简化数据库操作与模型定义

  5. 提供与 Egg.js 生命周期适配的数据库连接管理

如何访问 Sequelize

通过以下方式在 Egg.js 应用中访问 Sequelize 功能:

  1. 模型访问:

    // 在控制器中
    const users = await this.ctx.model.User.findAll();
    
    // 在服务中
    const users = await this.app.model.User.findAll();
    
  2. 原始 Sequelize 实例:

    // 访问 Sequelize 实例
    this.app.model // 是 Sequelize 实例
    this.ctx.model // 是 Sequelize 实例(与上下文关联)
    
    // 可以调用 Sequelize 实例方法
    await this.app.model.sync();
    await this.app.model.query('SELECT * FROM users');
    
  3. 多数据源配置时:

    // 访问不同数据源
    this.app.model.User // 默认数据源模型
    this.app.adminModel.User // 管理员数据源模型
    

功能支持情况

egg-sequelize 基本支持 Sequelize 的所有核心功能:

  1. 模型定义与查询:完全支持,通过 app.model.define 定义模型,支持所有查询方法(findAllfindOne 等)

  2. 关联关系:支持,通过模型的 associate 方法定义关联

    Post.associate = function() {
      app.model.Post.belongsTo(app.model.User, { as: 'user' });
    }
    
  3. 数据迁移:支持,通过 sequelize-cli 进行迁移管理

  4. 事务管理:支持,可通过 app.model.transaction 使用

  5. 钩子函数:支持,可在模型中定义各种钩子

  6. 自定义 Sequelize 版本:支持,通过配置指定 Sequelize 实例

    exports.sequelize = {
      Sequelize: require('sequelize'), // 可指定版本
    };
    

实现原理

  1. 自动加载机制:

    • 默认从 app/model 目录加载模型文件

    • 按文件名自动映射为模型类(如 user.js 对应 app.model.User

    • 通过 delegate 和 baseDir 配置可自定义加载路径和访问名称

  2. 配置处理:

    • 合并默认配置与用户配置

    • 支持连接字符串(connectionUri)或详细参数配置

    • 处理多数据源配置,为每个数据源创建独立的 Sequelize 实例

  3. 生命周期管理:

    • 在 Egg.js 应用启动时初始化数据库连接

    • 提供与上下文(ctx)关联的模型访问方式

    • 在应用关闭时自动关闭数据库连接

 

总体而言,egg-sequelize 并非重新实现 Sequelize 功能,而是将 Sequelize 无缝集成到 Egg.js 生态中,同时提供符合 Egg.js 开发习惯的接口,

因此可以认为它支持 Sequelize 的所有功能。

 

 Link:https://www.cnblogs.com/farwish/p/19163990

posted on 2025-11-09 17:11  ercom  阅读(0)  评论(0)    收藏  举报