前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Egg 中的路由

Egg 中的路由

作者头像
越陌度阡
发布2020-11-26 10:39:52
1.7K0
发布2020-11-26 10:39:52
举报

1. 路由的写法

1. 路由 + 控制器,最常用的写法。

代码语言:javascript
复制
router.get('/admin/user',controller.admin.user.index);

2. 路由别名 + 路由 + 控制器。

代码语言:javascript
复制
router.get('adminUser', '/admin/user', controller.admin.user.index);

3. 路由 + 中间件 + 控制器。

代码语言:javascript
复制
var adminAuth = app.middleware.adminAuth({ password: 'secret' });
router.get('/admin/user', adminAuth, controller.admin.user.index);

4. 路由别名 + 路由 + 中间件 + 控制器。

代码语言:javascript
复制
var adminAuth = app.middleware.adminAuth({ password: 'secret' });
router.get('adminUser', '/admin/user', adminAuth, controller.admin.user.index);

上面的路由写的用的都是GET请求,其实可以支持所有的HTTP方法,如下所示。

在上面的路由中只插入了一个中间件,业务复杂时,还可以插入多个中间件,前提是要把用到的中间件全部引入。

代码语言:javascript
复制
router.get('/admin/user', middleware1, middleware2, ..., middlewareN, controller.admin.user.index);

控制器的在路由中的写法除了上面直接指定一个控制器以外,还可以简写为字符串。

代码语言:javascript
复制
// 直接指定控制器的写法
router.get('/admin/user', app.controller.admin.user.index);

// 将控制器简写为字符串的形式
router.get('/admin/user', 'admin.user.index');

2.路由的重定向

1. 内部重定向,即在同一个域名之间的重定向。

代码语言:javascript
复制
// app/router.js
module.exports = app => {
    // 302为指定临时重定向,有利于SEO优化。
    app.router.redirect('/', '/home/index', 302);
};

2. 外部重定向,即不同域名之间的重定向。

代码语言:javascript
复制
// app/controller/new.js
'use strict';
const Controller = require('egg').Controller;
class NewsController extends Controller {
    async index() {
        // 默认为临时重定向302
        // 改为永久重定向301
        this.ctx.status=301; 
        // 跳转到外部域名                          
        this.ctx.redirect(`https://www.baidu.com`);    
    } 
}

module.exports = NewsController;

3.路由模块化

当项目较大,路由太多时,可以对路由进行模块化管理。

与news有关的路由模块。

代码语言:javascript
复制
// app/router/news.js
module.exports = app => {
    app.router.get('/news/list', app.controller.news.list);
    app.router.get('/news/detail', app.controller.news.detail);
};

与admin有关的路由模块。

代码语言:javascript
复制
// app/router/admin.js
module.exports = app => {
    app.router.get('/admin/user', app.controller.admin.user);
    app.router.get('/admin/log', app.controller.admin.log);
};

在router.js中引入多个路由子模块。

代码语言:javascript
复制
// app/router.js
module.exports = app => {
    require('./router/news')(app);
    require('./router/admin')(app);
};

对路由进行模块化管理时,通常也会将控制器进行模块化管理。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 路由的写法
  • 2.路由的重定向
  • 3.路由模块化
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档