Skip to content

Commit

Permalink
docs: add sub directory support for controller (#734)
Browse files Browse the repository at this point in the history
  • Loading branch information
dead-horse authored and atian25 committed Apr 10, 2017
1 parent 88a1669 commit ee127ad
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
13 changes: 11 additions & 2 deletions docs/source/zh-cn/basics/controller.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ title: controller

## 如何编写 Controller

所有的 Controller 文件都必须放在 `app/controller` 目录下。Controller 支持多种形式进行编写,可以根据不同的项目场景和开发习惯来选择。
所有的 Controller 文件都必须放在 `app/controller` 目录下,可以支持多级目录,访问的时候可以通过目录名级联访问。Controller 支持多种形式进行编写,可以根据不同的项目场景和开发习惯来选择。

### Controller 类(推荐)

Expand Down Expand Up @@ -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) 对象的实例,通过它我们可以拿到框架封装好的处理当前请求的各种便捷属性和方法。
Expand Down
11 changes: 7 additions & 4 deletions docs/source/zh-cn/basics/router.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,26 +63,29 @@ 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。

下面是一些路由定义的方式:

```js
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
};
```

Expand Down

0 comments on commit ee127ad

Please sign in to comment.