Egg中获取路由传参与Koa差不多,主要的区别在于Egg中的控制器继承于Controller,所以在获取传参的时候要修改 this 的指向,下面用一个实例来说明如何获取路由传参。
首先在app文件夹下的 router.js 中添加路由。
'use strict';
module.exports = app => {
const { router, controller } = app;
// 配置静态路由,指向controller文件夹下news.js文件里的index方法
router.get('/news', controller.news.index);
// 配置动态路由,指向controller文件夹下的news.js文件里的detail方法
router.get('/detail/:id', controller.news.detail);
};
然后在 controller 中新建路由所对应的控制器文件 news.js,并在文件中添加路由所对应的方法 index 与 detail。
'use strict';
const Controller = require('egg').Controller;
class NewsController extends Controller {
async index() {
this.ctx.body = '新闻首页';
// Koa中获取get传值 ctx.query
// Egg中获取get传值 this.ctx.query
// 在浏览器中输入 http://127.0.0.1:7001/news?page=1
var query = this.ctx.query;
// 打印获取的路由参数
console.log(query);
// { page: '1' }
}
async detail() {
this.ctx.body = '新闻详情';
// Koa中获取动态路由传值 ctx.params
// Egg中获取动态路由传值 this.ctx.params
// 在浏览器中输入 http://127.0.0.1:7001/detail/123
var params = this.ctx.params;
// 打印获取的路由参数
console.log(params);
// { id: '123' }
}
}
module.exports = NewsController;
以上就是在 Egg 中获取路由传参的方法,分别是 this.ctx.query 和 this.ctx.params。
有一个小技巧,值得提一下,如果安装了 vscode-eggjs 这个插件,当在控制器文件中输入 egg 后会出现 egg controller 这个提示选项,选择确认该选项,就会自动生成与控制器文件名相关联的继承控制器,这样一来,就省去了我们给控制器命名的烦恼。
参考: