egg框架概述
之前自学egg的时候记录的笔记,看的是晓舟报告系列视频
egg项目初始化
npm init egg --type=simple
项目目录需要手动创建,创建项目时间较长,需要耐心等待
比如创建一个空的文件egg_project,再输入上面的命令
执行cnpm install安装依赖
执行npm run dev启动
会提示通过http://127.0.0.1:7001访问首页
路由与控制器
mvc概述:
mvc是一种软件设计规范,主要作用是逻辑拆分
可以将要实现的系统拆分成三层
模型model 处理数据
视图view 给用户显示数据
控制器controller 处理用户输入
egg中的控制器 controller:
1 直接相应数据或渲染模板
2 接受用户的输入
3 与路由建立对应关系
this.ctx可以获取到当前请求的上下文对象,通过此对象可以便捷获取到请求与响应的属性与方法
在controller目录下新建文件,这个文件就是控制器了
比如在controler目录下建立fruits.js文件,这就是fruits控制器
他自带的home.js里代码的意义如下:
'use strict'; //严格模式
//并不是egg专有的,是js的语法
//controller类,egg提供的
//拿到controller类
const Controller = require('egg').Controller;
//定义我们自己的controller来继承egg提供的类
class HomeController extends Controller {
async index() {
const { ctx } = this;
ctx.body = `
<h1>hello kayo</h1>
`;
}
}
//暴露接口
module.exports = HomeController;
我们按照这个思路,写我们自己的fruits的文件:
fruits.js
const Controller = require("egg").Controller;
class FruitsController extends Controller{
}
module.exports = FruitsController;
先写出框架,再添加内容
const Controller = require("egg").Controller;
class FruitsController extends Controller{
async index(){
this.ctx.body = "我是一个水果列表页面" //上下文对象
}
}
module.exports = FruitsController;
先简单设置一下,如果想显示这个页面,就要给他设置路由
通过在router.js里设置路由,就可以在访问https://127.0.0.1:7001/fruits的时候显示刚刚写的内容了
'use strict';
/**
* @param {Egg.Application} app - egg application
*/
module.exports = app => {
const { router, controller } = app;
router.get('/', controller.home.index);
router.get('/fruits',controller.fruit.index);
};
路由
通过路由传递参数
1 获取query参数
2 获取params参数
GET请求:
第一种语法
在fruit.js里先修改相应的部分
const Controller = require("egg").Controller;
class FruitsController extends Controller{
async index(){
// this.ctx.request 可以拿到请求的对象
// this.ctx.request.query 可以拿到get请求中url的参数
//比如说想拿到一个索引的index
let query = this.ctx.request.query;
this.ctx.body = "我是一个水果列表页面" //上下文对象
}
}
module.exports = FruitsController;
在浏览器里输入连接,http://127.0.0.1:7001/fruits?index=100,先传递一个参数index=100
let query = this.ctx.request.query;
console.log(query);
刷新页面,看到服务器可以输出,说明参数传递成功了
另一个GET的语法:
在router.js里添加一条新的路由
'use strict'; //严格模式
/**
* @param {Egg.Applicatio