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