NestJs 接口参数处理

53 阅读1分钟

NestJs 处理不同格式的接口参数。

接口参数格式

  1. url params 参数在路径上 /detail/1
  2. query 在url参数上
  3. form-urlencoded 表单编译
  4. form-data formData类型的,主要是为了传递文件
  5. 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`;
  }
}