egg出现的原因
- Express 和 Koa 是 Node.js 社区广泛使用的框架,简单且扩展性强,非常适合做个人项
目。但框架本身缺少约定,标准的 MVC 模型会有各种千奇百怪的写法。Egg 按照约定进行
开发,奉行『约定优于配置』,团队协作成本低。
egg的优势
- Egg.js 基于 Es6、Es7 以及 Typescript、Koa2 使得 Nodejs 具有更规范的开发模式、更低
的学习成本、更优雅的代码、更少的开发成本、更少的维护成本。为企业级框架而生。
egg安装
- npm i egg-init -g
- egg-init [projectName] --type=simple
- cd [projectName]
- npm i
- npm run dev
egg是一个MVC
框架
Mode
:模型,专门和数据打交道(查询数据库 请求数据);View
:视图,页面存放的地方;controller
:控制器,负责处理业务逻辑;
egg目录结构与工作流程
目录结构,主要分为app
和config
(配置文件目录),app下的文件目录以及作用为
controller
:控制器,用来处理逻辑,并返回数据;对应MVC中的Cpublic
:存放静态资源文件;View
:存放前台文件;对应MVC中的V;service
:和数据打交道,查询数据库等,对应MVC中的M
egg工作流程:
- 用户输入路径,
- 根据路径去
router.js
中去匹配,查找到对应controller
; - 在根据
controller
中的逻辑,分别去查询数据和请求页面;
URL
传值的两种方式
GET
传值
- 通过
this.ctx.query
的方式能够获取到查询字符串的值,返回值是一个对象形式
- 如:
url=127.0.0.1:7001/music?id=123
-----this.ctx.query // { id: 123 }
动态路由
- 在路由中定义路径
router.get('/music/:id', controller.music.music)
- 通过
console.log(this.ctx.params) // { id: xxx }
服务的几条基本原则:
- 服务已经被挂在到
ess.js
的this
下面,我们可以在controller
中直接通过this.service.xxx
的方式去获取; - 一个
controller
能够调用多个M; - 所有的
service
都可以相互访问;
M的命令规则
- 要使用驼峰命名法;
- 支持多级目录;
- 多级目录中,在使用时,需要通过
.
的方式去拿到数据; app/service/bin/user.js
---- this.service.bin.user
'use strict';
const Service = require('egg').Service;
class MusicService extends Service {
async index() {
const music = [ 1, 2, 3, 4 ];
return music;
}
}
module.exports = MusicService;