能让使用 typescript
编写的 egg.js 项目中可以使用 sequelize方法,并同时获得egg.js所赋予的功能。mysql
this plugin use sequelize-typescript
replace with sequelize
in egg.js
. at the same time, make sure of usergit
插件只是将 egg-sequelize
中的 sequelize 替换为 sequelize-typescript, 同时保证用户在 egg.js 建立的项目中使用 egg-sequelize
的方法尽可能一致,在使用时的不一样,我将下面一一阐述。 其余内容部分请查看 egg-sequelize。
此插件已在生产项目中获得实践。github
$ npm i --save egg-sequelize-ts $ yarn add egg-sequelize-ts
config/plugin.js
config/plugin.js
文件中引入 egg-sequelize-ts
组件exports.sequelize = { enable: true, package: 'egg-sequelize-ts' }
conif/config.{env}.js
conif/config.{env}.js
中编写 sequelize 配置config.sequelize = { dialect: 'mysql', host: '127.0.0.1', port: 3306, database: 'database' };
分别以 model/user.js 和 service/user.js 举例说明sql
note 注意咱们都是从
sequelize-typescript
中导出类名,方法,属性等。typescript
// app/model/user.js /** * @desc 用户表 */ import { AutoIncrement, Column, DataType, Model, PrimaryKey, Table } from 'sequelize-typescript'; @Table({ modelName: 'user' }) export class User extends Model<User> { @PrimaryKey @AutoIncrement @Column({ type: DataType.INTEGER(11), comment: '用户ID', comment: 'user id' }) id: number; @Column({ comment: '用户姓名', }) name: string; @Column({ comment: '用户邮箱' }) email: string; @Column({ comment: '用户手机号码' }) phone: string; @Column({ field: 'created_at' }) createdAt: Date; @Column({ field: 'updated_at' }) updatedAt: Date; }; export default () => User;
// app/service/user.js import { Service } from 'egg'; import { Sequelize } from 'sequelize-typescript'; class UserService extends Service { async index() { const { or } = Sequelize.Op; const users = await this.ctx.model.User.findOne({ where: { [or]: [ { name, phone }, { id } ] } }); this.ctx.body = users; } }
index.d.ts
文件中的类型sequelize-typescript
.for example:npm
- import * as sequelize from "sequelize"; + import { Sequelize, ISequelizeValidationOnlyConfig } from 'sequelize-typescript'; declare module 'egg' { + // 便于egg 将方法挂载到IModel上 + interface IModel extends Sequelize { } interface Application { - Sequelize: sequelize.SequelizeStatic; - model: sequelize.Sequelize; + Sequelize: Sequelize; + model: IModel; } }
了解详情,请点击commitbash
loader.js
中的内容filter(model)
中使用findAll 替换sequelize,由于seq-ts在执行addModels才会有 sequelizeseq-ts须要手动添加modelsapp
sequelize.addModels(models);
了解详情,请点击commitasync
若是对您有帮助,欢迎 star 和推荐 (✿◡‿◡)this