egg-sequelize-ts 插件
egg-sequelize-ts plugin
目的 (Purpose)
能让使用 typescript
编写的 egg.js 项目中能够使用 sequelize方法,并同时得到egg.js所赋予的功能。
说明 (Description)
this plugin use sequelize-typescript
replace with sequelize
in egg.js
. at the same time, make sure of user
插件只是将 egg-sequelize
中的 sequelize 替换为 sequelize-typescript, 同时保证用户在 egg.js 创建的项目中使用 egg-sequelize
的方法尽量一致,在使用时的不同,我将下面一一阐述。 其他内容部分请查看 egg-sequelize。
此插件已在生产项目中得到实践。
安装 (Install)
$ npm i --save egg-sequelize-ts
$ yarn add egg-sequelize-ts
配置 (Config)
- Enable plugin in
config/plugin.js
- 在
config/plugin.js
文件中引入egg-sequelize-ts
组件
exports.sequelize = {
enable: true,
package: 'egg-sequelize-ts'
}
- Edit your own configurations in
conif/config.{env}.js
在conif/config.{env}.js
中编写 sequelize 配置
config.sequelize = {
dialect: 'mysql',
host: '127.0.0.1',
port: 3306,
database: 'database'
};
例子 (Example)
分别以 model/user.js 和 service/user.js 举例说明
note 注意我们都是从
sequelize-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;
}
}
更改内容(Major changes)
- 替换
index.d.ts
文件中的类型
主要将 interface 中的Sequelize,model指向sequelize-typescript
.
for example:
- 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;
}
}
- 替换
loader.js
中的内容
- 使用(‘sequelize-typescript’).Sequelize替换sequelize
- 在
filter(model)
中使用findAll 替换sequelize,因为seq-ts在执行addModels才会有 sequelize -
seq-ts需要手动添加models
sequelize.addModels(models);
如果对您有帮助,欢迎 star 和推荐 (✿◡‿◡)