Skip to content

Nest.js 系列——编写 web 接口以及各种参数获取

前言

前面基本搭建了一个基本的开发接口的环境,但是有小伙伴说编写基本的 curd 接口部分不够详细,所以这次就详细的讲解一下,如何编写一个基本的 curd 接口。

以及在编写接口的过程中,会遇到哪几种获取请求参数的方式。

请求中的参数获取方式

参数一共 5 种

  • url param

  • query

  • form-urlencoded

  • form-data

  • json

那么这 5 种数据传输的各种表现形式是什么样子的呢?用几个例子来说明一下

url param

一般是路径传参

url param 是指的是 url 中的参数,比如下面的例子

可以看下控制器中通过 @Param()装饰器获取到了 url 中的参数

ts
@Get(':id')
findOne(@Param('id') id: string) {
  return `后端接收的url param参数:${id}`;
}

query

query 是指的是 url 中?后面的查询参数,比如下面的例子

ts
@Get('find')
  query(@Query('name') name: string, @Query('age') age: number) {
    return `后端接收的query参数: name=${name},age=${age}`;
  }

form-urlencoded

form-urlencoded 是指的是表单提交的数据,比如下面的例子

通过 body 装饰器能拿到请求的参数

ts
@Post()
body(@Body() createUserDto: CreateUserDto) {
  return `后端接收到的body参数: ${JSON.stringify(createUserDto)}`;
}

// 拿到的参数
{
  "name": "water",
  "age": 18
}

json

json 是指的是 json 格式的数据,不用设置,默认就是 json 格式的数据

ts
@Post()
body(@Body() createUserDto: CreateUserDto) {
  return `后端接收到的body参数: ${JSON.stringify(createUserDto)}`;
}

可以看出和上一种获取参数的方式相同都是使用 @Body()装饰器获取参数,而且一般这个 json 的方式比较常用

form-data

form-data 一般用来作为文件传输的场景比较到,比如上传文件,这里就演示下如果在 nest 中上传文件,并用 form-data 的方式 需要安装一个包

bash
npm i -D @types/multer

这个是专门用来做文件上传的

ts
@Post('file')
 @UseInterceptors(
   AnyFilesInterceptor({
     dest: 'uploads/',
   }),
 )
 file(
   @Body() createUserDto: CreateUserDto,
   @UploadedFiles() files: Array<Express.Multer.File>,
 ) {
   console.log(files);
   return `received: ${JSON.stringify(createUserDto)}`;
 }

通过 @UploadedFiles()装饰器获取到上传的文件

小结

通过这些方式技能简单的生成一个业务接口的模块代码,而且通过每种传递参数的方式都有对应的装饰器去获取参数,总体处理起来很方便,有什么不对的地方欢迎指正。希望对你有所帮助,谢谢!