01_创建Ts类型Egg项目
01-安装Egg脚手架
npm i egg-init -g
02-通过Egg脚手架创建Egg-Ts项目
egg-init 项目名称 --type=ts
03-进入项目
cd 项目名称
npm i
04-测试
npm run dev
05-效果图
02_使用Ts操作Sequelize
01-安装插件
npm install --save egg-sequelize mysql2
npm install --save-dev @types/node @types/validator
npm install sequelize reflect-metadata sequelize-typescript
# 这里我安装的是1的版本,因为2的版本我后续编写的代码报错了,我也一直无法解决
# 所以这里我就使用1的版本,具体原因还需后续研究
# 如果有知道的大佬可以指导我一下
npm i sequelize-typescript
npm i --save egg-sequelize-ts
02-配置插件
在 config/plugin.js 中引入 egg-sequelize-typescript 插件
exports.sequelize = {
enable: true,
package: 'egg-sequelize-ts'
}
在 config/config.default.js 中编写 sequelize 配置
# 这里我在config.local.ts(开发阶段)文件中进行配置
# 这里我再进行了额外的配置(用户名,密码)
config.sequelize = {
dialect: 'mysql',
host: '127.0.0.1',
port: 3306,
usename:'root',
password:'root',
database: 'sandy',
};
03-编写代码
需要我们来在 app/model/ 目录下编写代码
import { AutoIncrement, Column, DataType, Model, PrimaryKey, Table } from 'sequelize-typescript';
@Table({
// 配置
modelName: 'persons'
})
export class User extends Model<User> {
// 快捷装饰器(如果要使用快捷装饰器,必须把装饰器放在Column的前面)
@PrimaryKey
@AutoIncrement
@Column({
// 支持类型推断
// type: DataType.INTEGER,
comment: '用户ID',
})
id: number;
@Column({
type: DataType.STRING,
comment: '用户姓名',
})
name: string;
};
export default () => User;
# 在路由中配置一下路径
import { Application } from 'egg';
export default (app: Application) => {
const { controller, router } = app;
router.get('/', controller.home.index);
};
# 在控制器中配置一下方法
import { Controller } from 'egg';
export default class HomeController extends Controller {
public async index() {
const { ctx } = this;
ctx.body = await ctx.model.User.findAll();
}
}
04-效果图
03_扩展
大部分来说Egg-Ts和Sequelize-Ts一样,只需要照着官方文阅读使用就可以了
但是因为Sequelize不是使用Ts来写的,所以在整合的时候需要大量的配置和修改
这里我就推荐另外一个ORM框架: TypeORM typeorm.biunav.com/zh/
TypeORM是使用Ts编写的,所以在集成使用的时候非常简单
但是TypeORM比较新,还是存在一些坑,遇到坑的时候相关的资料也不是很多,所以暂时不适合企业开发
Sequelize比较成熟稳定,适合企业级开发
04_Sequelize-cli
01-安装插件
npm install --save-dev sequelize-cli
02-编写代码
# 需要我们在项目根目录下新建一个 .sequelizerc 配置文件
'use strict';
const path = require('path');
module.exports = {
config: path.join(__dirname, 'database/config.json'),
'migrations-path': path.join(__dirname, 'database/migrations'),
'seeders-path': path.join(__dirname, 'database/seeders'),
'models-path': path.join(__dirname, 'app/model'),
};
03-初始化 Migrations 配置文件和目录
npx sequelize init:config
npx sequelize init:migrations
04-修改数据库配置
# 执行完后会生成 database/config.json 文件和 database/migrations 目录
# 我们修改一下 database/config.json 中的内容,将其改成我们项目中使用的数据库配置
{
"development": {
"username": "root",
"password": null,
"database": "egg-sequelize-doc-default",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": null,
"database": "egg-sequelize-doc-unittest",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
05-配置表
npx sequelize migration:generate --name=init-表的名称
# 执行完后会在 database/migrations 目录下生成一个 migration 文件(${timestamp}-init-users.js)
# 我们修改它来处理初始化 users 表
# 因为当前我们开发的是Ts的项目
# 所以要把js文件改为ts
# 默认执行js代码是可以的,当然为了规范也可以编写ts代码
'use strict';
module.exports = {
// 在执行数据库升级时调用的函数,创建 users 表
up: async (queryInterface, Sequelize) => {
const { INTEGER, DATE, STRING } = Sequelize;
await queryInterface.createTable('users', {
id: { type: INTEGER, primaryKey: true, autoIncrement: true },
name: STRING(30),
age: INTEGER,
created_at: DATE,
updated_at: DATE,
});
},
// 在执行数据库降级时调用的函数,删除 users 表
down: async queryInterface => {
await queryInterface.dropTable('users');
},
};
06-创建表
npx sequelize db:migrate