3.0.6 • Published 5 months ago

@kne/fastify-sequelize v3.0.6

Weekly downloads
-
License
ISC
Repository
github
Last release
5 months ago

fastify-sequelize

描述

Fastify与Sequelize的深度集成插件,支持自动模型加载和分布式ID生成

安装

npm i --save @kne/fastify-sequelize

概述

核心功能概述

  1. ORM 集成

    • 无缝集成 Sequelize ORM 到 Fastify 框架
    • 支持多种数据库(SQLite/MySQL/PostgreSQL等)
  2. 自动化模型管理

    • 自动扫描指定目录下的模型文件
    • 支持动态添加模型
    • 自动处理模型关联关系
  3. 分布式ID生成

    • 内置雪花算法ID生成器
    • 可配置的基准时间和实例ID

详细配置说明

数据库连接配置
参数类型必填默认值说明
dialectstring'sqlite'数据库类型
databasestringnull数据库名称
usernamestringnull数据库用户名
passwordstringnull数据库密码
hoststring'localhost'数据库地址
portnumber数据库默认端口连接端口
高级配置选项
{
  // 雪花ID生成配置
  snowflake: {
    instance_id: 1,             // 分布式ID实例编号(0-1023)
    custom_epoch: 1672531200000 // 基准时间戳(2024-01-01)
  },
  
  // 数据库同步配置
  syncOptions: {                
    force: false,               // 强制同步(会删除原有表结构)
    alter: true                 // 安全模式自动修改表结构
  },
  
  // 模型加载配置
  modelsPath: './models',       // 模型文件存放路径
  prefix: 't_',                 // 数据库表名前缀
  name: 'models'               // Fastify实例上的挂载名称
}

模型定义规范

基础模型示例
// models/user.js
module.exports = ({ DataTypes }) => ({
  name: 'User',
  model: {
    username: {
      type: DataTypes.STRING(32),
      allowNull: false,
      unique: true
    },
    age: {
      type: DataTypes.INTEGER,
      defaultValue: 18
    }
  },
  options: {
    timestamps: true  // 启用时间戳
  }
});
关联模型示例
// models/post.js
module.exports = ({ DataTypes }) => ({
  name: 'Post',
  model: {
    title: DataTypes.STRING,
    content: DataTypes.TEXT
  },
  associate(db) {
     db.Post.belongsTo(db.User, { 
      foreignKey: 'authorId',
      as: 'author'
    });
  }
});

最佳实践建议

  1. 开发环境配置
fastify.register(fastifySequelize, {
  db: {
    dialect: 'sqlite',
    storage: './dev.db'
  },
  syncOptions: {
    alter: true  // 开发时自动同步表结构
  }
});
  1. 生产环境配置
fastify.register(fastifySequelize, {
  db: {
    dialect: 'mysql',
    host: 'db.prod.com',
    database: 'prod_db',
    username: 'admin',
    password: 'securePassword123'
  },
  syncOptions: {
    alter: false  // 生产环境禁用自动修改
  }
});
  1. 迁移策略
    • 开发阶段可使用 force: true 快速重置数据库
    • 生产环境建议使用 Sequelize 迁移工具
    • 重要变更应通过手动迁移脚本执行

注意:雪花ID的基准时间建议设置为项目启动日期,instance_id 在分布式环境中需要确保唯一

示例

示例代码

API

配置选项

配置项类型默认值说明
db.dialectstring'sqlite'数据库类型 (mysql/postgres/sqlite等)
db.usernamestringnull数据库用户名
db.passwordstringnull数据库密码
snowflake.instance_idnumber1雪花ID生成器实例ID
snowflake.custom_epochnumber2024-01-01时间戳雪花ID基准时间
modelsPathstring'./models'模型文件存放路径
prefixstring't_'数据库表名前缀
namestring'models'在fastify实例上的挂载名称

实例属性/方法

属性/方法类型描述
addModelsFunction用于添加 Sequelize 模型的函数
SequelizeObjectSequelize 库的引用
[config.name]Object动态命名的模型集合,当 config.modelsPath 是目录时加载的模型
instanceSequelizeSequelize 实例的引用
generateIdFunction生成唯一 ID 的函数(使用 snowflake 算法)
syncAsync Function同步所有模型到数据库的方法

sync 方法详情

参数类型默认值描述
optionsObject{}Sequelize 同步选项,会与 config.syncOptions 合并
3.0.0-alpha.7

6 months ago

3.0.0-alpha.6

10 months ago

3.0.0-alpha.1

11 months ago

3.0.0-alpha.0

11 months ago

3.0.0-alpha.3

11 months ago

3.0.0-alpha.2

11 months ago

3.0.0-alpha.5

11 months ago

3.0.0-alpha.4

11 months ago

3.0.4

5 months ago

3.0.3

5 months ago

3.0.2

6 months ago

3.0.1

6 months ago

3.0.6

5 months ago

3.0.5

5 months ago

3.0.0

6 months ago

1.0.0

1 year ago

2.0.3

1 year ago

2.0.2

1 year ago

2.0.5

1 year ago

2.0.4

1 year ago

0.1.3

1 year ago

2.0.1

1 year ago

2.0.0

1 year ago

0.1.2

1 year ago

0.1.1

1 year ago

0.1.0

1 year ago