本系列文章是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