本系列文章是Egg學習過程的一個記錄,初步目標是寫一個我的博客,會盡量多使用Egg中提供的各類功能.
本文所有使用 async
請確保Node版本足夠支持.
文中有不正確地方請指正.
GitHub地址: https://github.com/devil5263/...
Egg文檔: https://eggjs.org/zh-cn/intro/html
使用Egg腳手架初始化項目前端
$ npm instal egg-init -g $ egg-init egg-example --type=simple // 選擇初始化項目的類型 $ cd egg-example $ npm install
項目目錄結構vue
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
這裏使用了兩個Egg的插件mysql
egg-mysql
用於鏈接MySQL(須要npm install egg-mysql
)egg-sequelize
用於定義model進行db層操做(須要安裝egg-sequelize
和mysql2
兩個庫)數據庫配置webpack
// {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; };
插件配置git
// {work_dir}/config/plugin.js exports.sequelize = { enable: true, package: "egg-sequelize" };
啓動時建立數據庫表github
// {work_dir}/app.js module.exports = app => { app.beforeStart(async function () { await app.model.sync({ force: true }); }); };
定義modelweb
// {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
sql