官方文档:Introduction | Egg(egg.org)
为什么要学 Egg.js ?
之前写后端用 Java 比较多,不过我业余时,也会用 Node.js + Express/Koa 框架去搭建后台。三月初,我换了一份新的工作 Node 后端开发,但是公司用的时 Egg 框架,我打开 Egg 官网 一开,好熟悉的项目结构:
egg-project
├── app
│ ├── controller
│ │ └── home.ts
│ ├── model(数据库表结构抽象出来的模型)
│ │ └── User.ts
│ ├── service
│ │ └── user.ts
│ └── router.ts
├── config
│ ├── config.default.ts
│ ├── config.local.ts
│ ├── config.prod.ts
│ └── plugin.ts
├── test (测试文件夹)
│ └── **/*.test.ts
├── typings (目录用于放置 d.ts 文件)
│ └── **/*.d.ts
├── README.md
├── package.json
├── tsconfig.json
└── tslint.json
MVC 机构真的熟悉不过了,于是我看了文档 搭了 dome 感觉还行。原来它是基于 koa 封装的。说白了就是 Koal 的增强版。哈哈。
Egg 使用体验
起初我搭建 dome 时,是用 JavaScript 写的,我感觉没 Java 写的舒服,弱语言加上没有智能提示,很不习惯,但是文件结构明了,配置起来很简单。后面当我用上了 TypeScript 搭建 Egg 时 ,一个字,爽!
Egg Orm 体验
和 Egg 比较配套的是 Sequelize,它和 Java 的 Jpa 差不多,但我们得了解它得异步性和它特有得有语法。我觉得它比 Egg 更得下学习成本。
下面是 创建一个 model 的 dome
import { Application } from "egg";
import * as Sequelize from "sequelize"
const { INTEGER, DATE, TEXT, STRING } = Sequelize;
export default (app: Application) => {
const Model = app.model.define(
'notes',
{
id: {
type: INTEGER,
autoIncrement: true,
primaryKey: true,
comment: '便签id',
},
title: {
type: STRING(30),
allowNull: false,
comment: '标题'
},
content: {
type: TEXT,
comment: '内容'
},
createdAt: {
type: DATE,
comment: '创建时间',
},
updatedAt: {
type: DATE,
},
deletedAt: {
type: DATE,
comment: '删除时间',
defaultValue: '1970-01-01 00:00:00',
},
},
{
charset: 'utf8mb4',
collate: 'utf8mb4_bin',
timestamps: true,
//关掉下划线
underscored: false,
//为了判断软删除
paranoid: true,
}
)
class Note extends Model {
id: number;
title: any;
static associate() {
this.belongsToMany(app.model.Tag, { through: app.model.NoteTag, constraints: false });
this.hasMany(app.model.NoteTag,{sourceKey:'id',foreignKey:'noteId'});
}
};
Note.afterDestroy(async (instance, options) => {
const { id: noteId } = instance;
const { transaction } = options
await Promise.all([
app.model.NoteTag.destroy({
where: { noteId },
transaction,
individualHooks: true,
})
])
})
return Note
}