天天看點

Egg 擷取路由傳參

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 這個提示選項,選擇确認該選項,就會自動生成與控制器檔案名相關聯的繼承控制器,這樣一來,就省去了我們給控制器命名的煩惱。

參考:

https://eggjs.org/zh-cn/basics/router.html

https://eggjs.org/zh-cn/basics/controller.html