前言
本系列文章是Egg學習過程的一個記錄,初步目標是寫一個個人部落格,會盡可能多使用Egg中提供的各種功能.
本文全部使用 async
請確保Node版本足夠支援.
文中有不正確地方請指正.
GitHub地址: https://github.com/devil5263/…
Egg文件: https://eggjs.org/zh-cn/intro/
初始化專案
使用Egg腳手架初始化專案
$ npm instal egg-init -g
$ egg-init egg-example --type=simple // 選擇初始化專案的型別
$ cd egg-example
$ npm install
專案目錄結構
egg-project
├── package.json
├── app.js //自定義啟動時的初始化工作
├── app
| ├── router.js // 配置 URL 路由規則
│ ├── controller // 控制層
│ | └── auth.js // 業務邏輯-註冊登入實現
│ ├── service // 業務邏輯層
│ | └── auth.js // 業務邏輯-註冊登入實現
| ├── model // 資料庫表結構
│ | └── user.js // 業務邏輯-user表
│ ├── middleware // 中介軟體
│ ├── schedule // 任務
│ └── extend // 框架的擴充套件
├── config // 初始化-所有配置檔案
| ├── plugin.js
| ├── config.default.js
│ ├── config.prod.js
| ├── config.test.js (可選)
| ├── config.local.js (可選)
| └── config.unittest.js (可選)
├── build // 前端webpack打包配置
| ├── webpack.base.js
| ├── webpack.dev.js
| └── webpack.prod.js
├── resource// 前端原始檔
| ├── assets // 前端資源
| ├── components // 前端元件
│ └── pages // 前端頁面
| └── page1 // 某一頁面
| ├── app.vue // vue單檔案元件
| ├── index.js // vue入口檔案
| ├── index.html // html頁面
| └── js (可選) // store/router js檔案
└── test // 初始化-單元測試用例
├── middleware
| └── response_time.test.js
└── controller
└── home.test.js
MySQL配置
這裡使用了兩個Egg的外掛
-
egg-mysql
用於連線MySQL(需要npm install egg-mysql
) -
egg-sequelize
用於定義model進行db層操作(需要安裝egg-sequelize
和mysql2
兩個庫)
資料庫配置
// {work_dir}/config/config.default.js
const database = "egg"; // 資料庫名字
module.exports = appInfo => {
const config = {};
config.keys = appInfo.name + "_1501817502166_7037";
config.sequelize = { // egg-sequelize 配置
dialect: "mysql", // db type
database: database,
host: "localhost",
port: "3306",
username: "root",
password: ""
};
return config;
};
外掛配置
// {work_dir}/config/plugin.js
exports.sequelize = {
enable: true,
package: "egg-sequelize"
};
啟動時建立資料庫表
// {work_dir}/app.js
module.exports = app => {
app.beforeStart(async function () {
await app.model.sync({ force: true });
});
};
定義model
// {work_dir}/app/model/user.js
module.exports = app => {
const { STRING, INTEGER, DATE } = app.Sequelize;
const User = app.model.define("user", {
login: STRING,
id: {
type: INTEGER,
primaryKey: true,
autoIncrement: true
},
name: STRING(30),
password: STRING(32),
age: INTEGER,
last_sign_in_at: DATE,
created_at: DATE,
updated_at: DATE
});
return User;
};
目前為止,egg-example專案已初始化並新增了MySQL配置,成功啟動後會發現資料庫中已經有了定義的 model User