[toc]
egg 自学入门demo分享
2018-08,本文适用于对egg有兴趣想要了解的同学
项目主要文件目录结构
|—— app
|—— controller
|—— cook.js
|—— model
|—— cook.js
|—— router.js
|—— config
|—— config.default.js
|—— plugin.js
|—— package.json
|—— README.md
安装
官网: https://eggjs.org/zh-cn/
- npm i egg-init -g
- egg-init egg-example --type=simple
- cd egg-example
- npm i
启动项目
- npm run dev
项目
本文主要是以搭建一个连接mongoDB的后端,以提供api接口
连接数据库
- 引入数据库插件,在plugin.js文件中添加如下代码
exports.mongoose = {
enable: true,
package: 'egg-mongoose',
};
- 在config.default.js中添加如下配置
config.mongoose = {
client: {
url: 'mongodb://127.0.0.1:27017/database-name',
},
}
编写model
在model文件下添加,cook.js 文件
module.exports = app => {
const mongoose = app.mongoose;
const Schema = mongoose.Schema;
const CookeSchema = new Schema({
_id: { type: Schema.Types.ObjectId },
name: { type: String },
img: { type: String },
step: { type: String }
}, {
versionKey: false
});
return mongoose.model('cooks', CookeSchema);
}
注意如果使用mongoDB中的_id时type的类型,以及如何去掉__v 版本锁字段。
编写controller
在controller文件夹下添加,cook.js文件
const Controller = require('egg').Controller;
class HomeController extends Controller {
async list() {
this.ctx.response.body = {
result: await this.ctx.model.Cook.find({}, {'_id': 0})
};
}
async listOne() {
const { id } = this.ctx.params
this.ctx.body = {
result: await this.ctx.model.Cook.find({ '_id': id }, {'_id': 0})
};
}
}
module.exports = HomeController;
这里用于获取数据库中的数据
添加路由
module.exports = app => {
const { router, controller } = app;
router.get('/cook/', controller.cook.list);
router.get('/cook/:id', controller.cook.listOne);
};
确保数据库能连接成功后,便可以启动项目。
本文只是辅助介绍快速搭建一个基本的egg项目,具体内容请参考:https://eggjs.org/
欢迎交流 Github