Skip to content

路由和控制器

在常见的 MVC 架构中,C 即代表控制器,控制器用于负责 解析用户的输入,处理后返回相应的结果

如图所示: 客户端通过 http 协议请求服务端德控制器,控制器处理结束后响应客户端,这是一个最最基本德请求-响应流程

图片

三种场景

  • 在 RESTful 接口中,控制器接受用户的参数,从数据库中查找内容返回给用户或者将用户的请求更新到数据库中。

  • 在 HTML 页面请求中,控制器根据用户访问不同的 URL,渲染不同的模板得到 HTML 返回给用户。

  • 在代理服务器中,控制器将用户的请求转发到其他服务器上,并将其他服务器的处理结果返回给用户。

一般来说 控制器常用于对用的请求参数做一些校验,转换,调用复杂的业务逻辑,拿到相应的结果后进行数据组装然后返回

在 Midway 中,控制器 也承载了路由的能力,每个控制器可以提供多个路由,不同的路由可以执行不同的操作。

在接下去的示例中,我们将演示如何在控制器中创建路由。

路由架构

控制器文件一般来说在src/controller目录中,我们可以在其中创建控制器文件。Midway 中,控制器文件以 .controller.ts 结尾。

Midway 使用 @Controller() 装饰器标注控制器,其中装饰器有一个可选参数,用于进行路由前缀(分组),这样这个控制器下面的所有路由都会带上这个前缀。

同时,Midway 提供了方法装饰器用于标注请求的类型。

比如,我们创建一个首页控制器,用于返回一个默认的 / 路由的页面。

ts
➜  my_midway_app tree
.
├── src
│   └── controller
│       └── home.controller.ts
├── test
├── package.json
└── tsconfig.json
  • 控制器代码
ts
// src/controller/home.ts

import { Controller, Get } from "@midwayjs/core";

@Controller("/")
export class HomeController {
  @Get("/")
  async home() {
    return "Hello Midwayjs!";
  }
}

说明

  1. @Controller() 装饰器用于定义控制器,其中 "/" 是路由前缀,表示这个控制器下的所有路由都会带上这个前缀。

  2. @Get() 装饰器用于定义路由方法,是 Get,还是 Post,还是 Put,还是 Delete

  3. 整个方法返回了一个字符串,在浏览器中,你会收到text/plain的响应一级一个 200 的状态码

  4. 控制器里面的方法都得是async异步方法