整体演示
Get 请求参数
Get 请求的参数一般会放在 URL 上,这只需要@Query
装饰器就行了。
Post 参数
Post 参数有些不同,会用到 DTO 的传输。因为数据通过 HTTP 传输是文本类型,因此需要将文本类型转化成代码可识别的变量。
新建 students.dto.ts
(在这里需要安装class-validator用npm,不装的话这样写:
// src/students/dtos/students.dto.ts
export class StudentDto {
name: string;
}
)
post 方法传递的参数是通过请求 body 给到后台的。需要通过 @Body
装饰器解析 Body 中的数据。
参数限制与转换
Get 请求
get 请求需要用到 ParseIntPipe
, 更多的内置管道列表可查看这里
浏览器访问的 url 默认是 string 类型,ParseIntPipe
管道能将 string 类型转化成 number 类型
这次我们实现的是通过 id 查找学生姓名。
Post 请求
Post 请求略微有些不一样,要用到 class-validator
安装 class-validator
npm i --save class-validator class-transformer
修改 main.ts
// main.ts
import { NestFactory } from '@nestjs/core';
import { ValidationPipe } from '@nestjs/common';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe());
await app.listen(3000);
}
bootstrap();
修改 student.dto.ts
import { IsNotEmpty, IsString } from 'class-validator';
export class StudentDto {
@IsNotEmpty()
@IsString()
name: string;
}
自定义装饰器
在 post 请求用到了大量的装饰器,系统装饰器能满足大部分场景,但是有些特定需求时,需要自定义装饰器。
例如这样一个场景:每个请求都会带上 user
字段。代表是谁做的请求,每次在代码里 getUser 是非常难受的事情,这时自定义装饰器就派上了用场。
新建 src/common/decorators.ts
修改 students.controller.ts
日志
后台接口请求常伴随日志产生,日志对后台查问题至关重要。NestJs 框架也集成了日志,开箱即用。
使用日志分为三步:
- main.ts 引入
Logger
- 模块引入日志组建:
private readonly logger = new Logger(StudentsService.name)
; - 在需要打印的地方引入: this.logger.log(`student name is ${name}`);
修改main.ts
引用 Logger 组建
控制台输出