1. 路由 + 控制器,最常用的写法。
router.get('/admin/user',controller.admin.user.index);
2. 路由别名 + 路由 + 控制器。
router.get('adminUser', '/admin/user', controller.admin.user.index);
3. 路由 + 中间件 + 控制器。
var adminAuth = app.middleware.adminAuth({ password: 'secret' });
router.get('/admin/user', adminAuth, controller.admin.user.index);
4. 路由别名 + 路由 + 中间件 + 控制器。
var adminAuth = app.middleware.adminAuth({ password: 'secret' });
router.get('adminUser', '/admin/user', adminAuth, controller.admin.user.index);
上面的路由写的用的都是GET请求,其实可以支持所有的HTTP方法,如下所示。
在上面的路由中只插入了一个中间件,业务复杂时,还可以插入多个中间件,前提是要把用到的中间件全部引入。
router.get('/admin/user', middleware1, middleware2, ..., middlewareN, controller.admin.user.index);
控制器的在路由中的写法除了上面直接指定一个控制器以外,还可以简写为字符串。
// 直接指定控制器的写法
router.get('/admin/user', app.controller.admin.user.index);
// 将控制器简写为字符串的形式
router.get('/admin/user', 'admin.user.index');
1. 内部重定向,即在同一个域名之间的重定向。
// app/router.js
module.exports = app => {
// 302为指定临时重定向,有利于SEO优化。
app.router.redirect('/', '/home/index', 302);
};
2. 外部重定向,即不同域名之间的重定向。
// 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;
当项目较大,路由太多时,可以对路由进行模块化管理。
与news有关的路由模块。
// 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有关的路由模块。
// 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中引入多个路由子模块。
// app/router.js
module.exports = app => {
require('./router/news')(app);
require('./router/admin')(app);
};
对路由进行模块化管理时,通常也会将控制器进行模块化管理。