在nest.js读取URL Param、Query String及Body资料很直观。
先把Server跑起來
yarn start:dev
然后准备fake data
// fake data
inLearningPlatforms = [
{
id: 1,
platformname: '极客教程',
url: 'https://www.geekjc.com',
},
{
id: 2,
platformname: 'geekjc',
url: 'https://www.geekjc.com',
},
];
及传递资料的DTO(Data Transfer Object)物件
export class UserDTO{
platformname: string;
url: string;
}
Param
以常见的id为例
/id
在Controller底下新增getUserById方法如下:
@Get(':platformId')
getPlatformById(@Param('platformId') id){
const platform = this.inLearningPlatforms.find((platform) => platform.id === parseInt(id, 10)); //解析后都是字串,要使用parseInt转成number
const resPlatform = new PlatformDTO();
resPlatform.platformname = platform.username;
resPlatform.url = platform.url;
return resUser;
}
@Get(':userId')意思是controller解析网址的时候,把最后一个url segment视作userId变数,透过@Param('路由变数')把数值指定给id,之后拿id来做搜寻使用者资料。
用Postman测试结果如下:
![](https://img.haomeiwen.com/i1637794/30b7ef9691b77038.png)
Query String
以分页为例,Query String包含page与size两个变量
/?page=1&size=20
在Controller底下新增queryedList方法如下
@Get()
queryedList(@Query() query): string {
return query;
}
@Query()会把Query String解析成javascript对象,Postman测试结果如下:
![](https://img.haomeiwen.com/i1637794/d5db8710fd4bd865.png)
Body
以新增学习平台为例,
修改上一章的create方法如下:
@Post()
create(@Body() platformDTO: PlatformDTO){ // platDTO: PlatformDTO代表platformDTO是PlatformDTO型別
return `平台:${platformDTO.platformname}已建立`;
}
用@Body来接收来自Request body的资料,Postman测试结果如下:
![](https://img.haomeiwen.com/i1637794/0de99f47f3c1be9c.png)
![](https://img.haomeiwen.com/i1637794/07fef021753c68e0.png)
网友评论