From ee127ad46b33a19d43c84a04649569a404a7f6af Mon Sep 17 00:00:00 2001 From: Yiyu He Date: Mon, 10 Apr 2017 12:38:31 +0900 Subject: [PATCH] docs: add sub directory support for controller (#734) --- docs/source/zh-cn/basics/controller.md | 13 +++++++++++-- docs/source/zh-cn/basics/router.md | 11 +++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/docs/source/zh-cn/basics/controller.md b/docs/source/zh-cn/basics/controller.md index 128b09845b..6c2aa65970 100644 --- a/docs/source/zh-cn/basics/controller.md +++ b/docs/source/zh-cn/basics/controller.md @@ -20,7 +20,7 @@ title: controller ## 如何编写 Controller -所有的 Controller 文件都必须放在 `app/controller` 目录下。Controller 支持多种形式进行编写,可以根据不同的项目场景和开发习惯来选择。 +所有的 Controller 文件都必须放在 `app/controller` 目录下,可以支持多级目录,访问的时候可以通过目录名级联访问。Controller 支持多种形式进行编写,可以根据不同的项目场景和开发习惯来选择。 ### Controller 类(推荐) @@ -57,11 +57,20 @@ module.exports = app => { ```js // app/router.js -module.exports = { +module.exports = app => { app.post('createPost', '/api/posts', 'post.create'); } ``` +Controller 支持多级目录,例如如果我们将上面的 Controller 代码放到 `app/controller/sub/post.js` 中,则可以在 router 中这样使用: + +```js +// app/router.js +module.exports = app => { + app.post('createPost', '/api/posts', 'sub.post.create'); +} +``` + 定义的 Controller 类,会在每一个请求访问到 server 时实例化一个全新的对象,而项目中的 Controller 类继承于 `app.Controller`,会有下面几个属性挂在 `this` 上。 - `this.ctx`: 当前请求的上下文 [Context](./extend.md#context) 对象的实例,通过它我们可以拿到框架封装好的处理当前请求的各种便捷属性和方法。 diff --git a/docs/source/zh-cn/basics/router.md b/docs/source/zh-cn/basics/router.md index 5d56079dd5..b7a7691e67 100644 --- a/docs/source/zh-cn/basics/router.md +++ b/docs/source/zh-cn/basics/router.md @@ -63,7 +63,8 @@ app.verb('router-name', 'path-match', middleware1, ..., middlewareN, 'controller - 在 Router 定义中, 可以支持多个 Middleware 串联执行 - Controller 必须定义在 `app/controller` 目录中。 -- 一个文件里面也可以包含多个 Controller 定义,在定义路由的时候,可以通过 `controller-filename.function-name` 的方式指定对应的 Controller。 +- 一个文件里面也可以包含多个 Controller 定义,在定义路由的时候,可以通过 `${fileName}.${functionName}` 的方式指定对应的 Controller。 +- Controller 支持子目录,在定义路由的时候,可以通过 `${directoryName}.${fileName}.${functionName}` 的方式制定对应的 Controller。 下面是一些路由定义的方式: @@ -71,18 +72,20 @@ app.verb('router-name', 'path-match', middleware1, ..., middlewareN, 'controller app.get('/home', 'home'); app.get('/user/:id', 'user.page'); app.post('/admin', isAdmin, 'admin'); -app.post('user', '/user', isLoginUser, hasAdminPermission, 'user.create'); +app.post('/user', isLoginUser, hasAdminPermission, 'user.create'); +app.post('/api/v1/comments', 'v1.comments.create'); // app/controller/v1/comments.js ``` ### RESTful 风格的 URL 定义 如果想通过 RESTful 的方式来定义路由, -我们提供了 `app.resources('router-name', 'path-match', 'controller-name')` 快速在一个路径上生成 [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) 路由结构。 +我们提供了 `app.resources('routerName', 'pathMatch', 'controllerName')` 快速在一个路径上生成 [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) 路由结构。 ```js // app/router.js module.exports = app => { - app.resources('posts', '/posts', 'posts'); + app.resources('posts', '/api/posts', 'posts'); + app.resources('users', '/api/v1/users', 'v1.users'); // app/controller/v1/users.js }; ```