# 控制器
*.controller.ts
- 概述:控制器负责处理传入的请求并向客户端返回响应
- 控制器会根据路由控制去接受特定url的请求。
- 使用cli创建控制器
nest g co controller_name --no-spec --flat
# 路由
- 使用
@Controller()装饰器,用于定义一个基本的控制器。可以传入可选的指定路由路径前戳。
/* test.controller.ts */
import { Controller, Get, Post } from '@nestjs/common'
@Controller('test') // 可选是否传入路由路劲前戳
export class TestController {
@Get('list') // 监听 get /test/list
getList() {}
@Post() // 监听 Post /test
addTest() {}
}
# 请求对象
- 概述:处理客户端请求的详细信息,我们可以使用
@Req()装饰器来指示Nest注入请求对象。
import { Controller, Get, Req } from '@nestjs/common'
import type { Request } from 'express'
@Controller('test')
export class TestController {
@Get('list')
getList(@Req() request: Request) {
console.log(request.query)
}
}
提示
利用express的类型定义,可以安装@types/express包
# 参数装饰器
| 装饰器名称 | 简单描述 |
|---|---|
@Req() | request对象 |
@Res() | response对象 |
@Session() | req.session |
@Param(key?: string) | req.params/req.params[key] |
@Body | 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 |
注意
Nest处理了返回参数,如果在方法中注入了@Res则需要手动的调用res.json()或者res.send(),否则请求将会挂起。
# HTTP方法装饰器
- 包含
@Get(path?: string)、@Post()、@Put()、@Delete()、@Patch()、@Options()、@Head()。@All()定义了一个处理所有方法的顶端。 - 支持通配符
@Get('ab*')
findAll() {}
@Get(':id')
getDetail() {}
# 状态码
- 默认情况下,响应的状态码始终为200,可以使用
HttpCode(code: number)装饰器修改
@Post()
@HttpCode(204)
add() {}
# 头部信息
- 指定响应头,可以使用
@Header()装饰器
@Post()
@Header('content-type', 'applicatioin/json;utf-8')
add() {}
- 重定向:
- 可以使用
Redirect(url?: string, statusCode?: number = 302)装饰器,接受两个可选参数url和status。 - 动态的返回重定向URL。可以通过返回特定形式的参数来覆盖
Redirect()装饰器的参数
- 可以使用
@Post()
@Redirect('https://www.baidu.com', 301)
add(@Body(id) id: string) {
if (id === '1') {
return { // 根据条件动态重定向,返回当前参数来覆盖Redirect()装饰器的参数
url: 'https://www.google.com',
stausCode: 301
}
}
}