NestJs 处理不同格式的接口参数。
接口参数格式
- url params 参数在路径上 /detail/1
- query 在url参数上
- form-urlencoded 表单编译
- form-data formData类型的,主要是为了传递文件
- json
NestJs 代码
form-urlencoded 和 json的代码是一样的。因为nest会根据content-type 去解析不同类型的数据,传回到controller中的方法 都是解析好的对象。
import {
Body,
Controller,
Get,
Param,
Post,
Query,
UploadedFile,
UseInterceptors,
} from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
class PersonDto {
id: string | number;
name: string;
age: string;
}
@Controller('api/data')
export class DataController {
// 上传单个文件 以及 其它属性
@Post('upload')
@UseInterceptors(
FileInterceptor('file', {
dest: 'uploads',
}),
)
uploadFile(
@Body() person: PersonDto,
@UploadedFile() file: Express.Multer.File,
) {
return `我收到你们的文件啦: name: ${person.name}, age: ${person.age}, filename: ${file.originalname}`;
}
// JSON data
@Post('add1')
addData1(@Body() person: PersonDto) {
return `添加记录 json:name: ${person.name} === age: ${person.age}`;
}
// form-urlencoded
@Post('add')
addData(@Body() person: PersonDto) {
return `添加记录 form-urlencoded:name: ${person.name} === age: ${person.age}`;
}
// query
@Get('search')
searchByField(@Query() query: PersonDto) {
return `name:${query.name + ' 喵'}; age: ${parseInt(query.age, 10) + 1}`;
}
// url params
@Get(':id')
getDetailById(@Param() obj: PersonDto) {
return `${obj.id}get`;
}
}