【Nest】控制器
2021/09/06 18:19:00
控制器负责处理传入的请求和向客户端返回响应。
路由(请求路径)
Nest 中的路由通过 @Controller() 装饰器的参数和响应装饰器参数(如@Get())决定。
下面例子定义了一个路径为 /cats/name
的 get
请求,访问这个路径会返回 hello word
。
import { Controller, Get } from "@nestjs/common";
@Controller("cats")
export class AppController {
@Get("name")
getHello(): string {
return "hello word";
}
}
处理响应
为不同请求设置处理程序
Nest 为所有标准的 HTTP 方法提供了相应的装饰器:@Get()、@Post()、@Put()、@Delete()、@Patch()、@Options()、以及 @Head()。
此外,@All() 用于定义一个处理所有 HTTP 请求方法的处理程序。
下面例子定义了一个路径为 /cats/name
的 post
请求,访问这个路径会返回 hello post
。
import { Controller, Post } from "@nestjs/common";
@Controller("cats")
export class AppController {
@Post("name")
getHello(): string {
return "hello post";
}
}
设置状态码
用 @HttpCode() 装饰器修改响应状态码。
import { Controller, All, HttpCode } from "@nestjs/common";
@Controller("cats")
export class AppController {
@All("name")
@HttpCode(202)
getHello(): string {
return "hello word";
}
}
Nest 提供的装饰器及其代表的底层平台特定对象的对照列表
在请求处理函数中注入 @Res() 或 @Response() 时,会将 Nest 置于该处理函数的特定于库(Library-specific mode)的模式下,并负责管理响应,这样做时,必须通过调用 response 对象(例如,res.json() 或 res.send())发出某种响应,否则 HTTP 服务器将挂起。
装饰器 | 底层对象(node-http) |
---|---|
@Request(),@Req() | req |
@Response(),@Res()* | res |
@Next() | next |
@Session() | req.session |
@Param(key?: string) | req.params /req.params[key] |
@Body(key?: string) | req.body /req.body[key] |
@Query(key?: string) | req.query /req.query[key] |
@Headers(name?: string) | req.headers /req.headers[name] |
@Ip() | req.ip |
@HostParam() | req.hosts |
下面例子在路由处理程序中访问 node-http 模块的 request、req.query、req.ip 属性。
import { Controller, Get, Req, Query, Ip } from '@nestjs/common';
import { AppService } from './app.service';
@Controller('cats')
export class AppController {
constructor(private readonly appService: AppService) { }
@Get('name')
getHello(
@Req() request,
@Query() query,
@Ip() ip,
): string {
console.log(query, ip)
return this.appService.getHello();
}
}