控制器
- 采用命令
nest new project-name
初始化一个项目之后,会提示yarn start
启动项目。此命令不是开发模式命令,会导致你修改文件与新增文件不会生效。应该使用yarn start:dev
启动。 - 支持两个支持开箱即用的 HTTP 平台:express 和 fastify。默认是express。平台会暴露自己的 API 供使用。
- 使用命令
nest g controller api
创建一个控制器。 - 路由与处理函数命名无关,有些框架,比如
ThinkJS
,不要写路由,处理函数就是路由。 -
Nest 支持两种数据返回方法。一种是直接返回值,其他的比如响应码由 Nest 负责。另外一种是通过 @Res() 注入类库特定的响应对象,自己构建响应。下面是一个自己构建响应状态码为204的例子:
import { Controller, Get, Res } from '@nestjs/common'; import { Response } from 'express'; @Controller('api') export class ApiController { @Get('res') res(@Res() res: Response) { res.status(204).send('Hello Res Test'); } }
- Nest 提供的装饰器及其代表的底层平台特定对象的对照列表
@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 |
- Nest 为所有标准的 HTTP 方法提供了相应的装饰器:
@Put()
、@Delete()
、@Patch()
、@Options()
、以及@Head()
。此外,@All()
则用于定义一个用于处理所有 HTTP 请求方法的处理程序。 - 路由通配符:@Get('ab*cd')。匹配ab_cd,abxxxcd等等。
- 状态码,由
@nestjs/common
导入,使用比如:@HttpCode(201) - 自定义响应头,@Header('Hello', 'World')
- 重定向,@Redirect('https://nestjs.com', 301)
- 路由参数,@Param() params,
GET /cats/1
, params.id == 1@Get(':id') findOne(@Param() params): string { console.log(params.id); return `This action returns a #${params.id} cat`; }
提供者
nest g service api
创建服务。
模块
nest g module api
创建模块
异常处理
throw new HttpException('Forbidden', HttpStatus.FORBIDDEN);