1.RESTful 风格的 URL 定义
如果想通过 RESTful 的方式来定义路由, egg提供了 app.router.resources(‘routerName’, ‘pathMatch’, controller) 快速在一个路径上生成 CRUD 路由结构。
module.exports = app => {
const { router, controller } = app;
router.resources('posts', '/api/posts', controller.posts);
router.resources('users', '/api/v1/users', controller.v1.users); // app/controller/v1/users.js
};
上面代码就在 /posts 路径上部署了一组 CRUD 路径结构,对应的 Controller 为 app/controller/posts.js 接下来, 你只需要在 posts.js 里面实现对应的函数就可以了。
2.router.resources支持的方法
Method | Path | Route Name | Controller.Action |
---|---|---|---|
GET | /posts | posts | app.controllers.posts.index |
GET | /posts/new | new_post | app.controllers.posts.new |
GET | /posts/:id | post | app.controllers.posts.show |
GET | /posts/:id/edit | edit_post | app.controllers.posts.edit |
POST | /posts | posts | app.controllers.posts.create |
PUT | /posts/:id | post | app.controllers.posts.update |
DELETE | /posts/:id | post | app.controllers.posts.destroy |
posts.js
resources只支持7中方法,他们分别是 index,new,show,edit,create,update,destroy ,除这其中方法以外,其它的自定义方法都无法访问
/*
*@name 资源路由
*/
'use strict';
const Controller = require('egg').Controller;
class PostController extends Controller {
async index(ctx) {
ctx.body = '列表';
}
async new(ctx) {
ctx.body = 'new';
}
async create(ctx) {
ctx.body = '新建';
}
async show(ctx) {
ctx.body = '显示';
}
async update(ctx) {
ctx.body = 'update';
}
async destroy(ctx) {
ctx.body = 'destroy';
}
}
module.exports = PostController;
【详解】
上面表格中每一列都是有含义的
method: 请求该方法的方式,如index方法只能通过GET方式进行访问
Path:请求路径 如请求 http://localhost:7001/post路径,返回的就是 posts.js文件中的 index方法
Route Name:路由的名称
Controller.Action:请求路径所绑定的方法(请求 http://localhost:7001/post 返回的是 app.controllers.posts.index,请求 http://localhost:7001/new返回的是 app.controllers.posts.new)