路由和控制器
在常见的 MVC 架构中,C
即代表控制器,控制器
用于负责 解析用户的输入,处理后返回相应的结果
。
如图所示: 客户端通过 http 协议请求服务端德控制器,控制器处理结束后响应客户端,这是一个最最基本德请求-响应
流程
三种场景
在 RESTful 接口中,控制器接受用户的参数,从数据库中查找内容返回给用户或者将用户的请求更新到数据库中。
在 HTML 页面请求中,控制器根据用户访问不同的 URL,渲染不同的模板得到 HTML 返回给用户。
在代理服务器中,控制器将用户的请求转发到其他服务器上,并将其他服务器的处理结果返回给用户。
一般来说 控制器常用于对用的请求参数做一些校验,转换,调用复杂的业务逻辑,拿到相应的结果后进行数据组装然后返回
在 Midway 中,控制器 也承载了路由的能力,每个控制器可以提供多个路由,不同的路由可以执行不同的操作。
在接下去的示例中,我们将演示如何在控制器中创建路由。
路由架构
控制器文件一般来说在src/controller
目录中,我们可以在其中创建控制器文件。Midway 中,控制器文件以 .controller.ts
结尾。
Midway 使用 @Controller()
装饰器标注控制器,其中装饰器有一个可选参数,用于进行路由前缀(分组),这样这个控制器下面的所有路由都会带上这个前缀。
同时,Midway 提供了方法装饰器用于标注请求的类型。
比如,我们创建一个首页控制器,用于返回一个默认的 /
路由的页面。
➜ my_midway_app tree
.
├── src
│ └── controller
│ └── home.controller.ts
├── test
├── package.json
└── tsconfig.json
- 控制器代码
// src/controller/home.ts
import { Controller, Get } from "@midwayjs/core";
@Controller("/")
export class HomeController {
@Get("/")
async home() {
return "Hello Midwayjs!";
}
}
说明
@Controller()
装饰器用于定义控制器,其中"/"
是路由前缀,表示这个控制器下的所有路由都会带上这个前缀。@Get()
装饰器用于定义路由方法,是 Get,还是 Post,还是 Put,还是 Delete整个方法返回了一个字符串,在浏览器中,你会收到
text/plain
的响应一级一个 200 的状态码控制器里面的方法都得是
async
异步方法