iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 5
0
Modern Web

讀官網文件邊走邊學nest.js系列 第 5

Day5-Controller讀取Param、Query String及Body

在nest.js讀取URL Param、Query String及Body資料很直觀。

先把Server跑起來

yarn start:dev

然後準備fake data

// fake data
  inMemoryUsers = [
    {
      id: 2,
      username: '測試2',
      email: 'test2@test.com',
    },
    {
      id: 3,
      username: '測試3',
      email: 'test3@test.com',
    },
  ];

及傳遞資料的DTO(Data Transfer Object)物件


    export class UserDTO{
      username: string;
      email: string;
    }

Param

以常見的id為例

/id

在Controller底下新增getUserById方法如下:

  

  @Get(':userId')
  getUserById(@Param('userId') id){
    const userFromMemory = this.inMemoryUsers.find((user) => user.id === parseInt(id, 10)); //解析後都是字串,要使用parseInt傳成number
    const resUser = new UserDTO();
    resUser.username = userFromMemory.username;
    resUser.email = userFromMemory.email;
    return resUser;
  }
  

@Get(':userId')意思是controller解析網址的時候,把最後一個url segment視作userId變數,透過@Param('路由變數')把數值指定給id,之後拿id來做搜尋使用者資料。

用Postman測試結果如下:

Query String

以分頁為例,Query String包含page與size兩個變數

/?page=1&size=20

在Controller底下新增queryedList方法如下

@Get()
  queryedList(@Query() query): string {
    return query;
  }

@Query()會把Query String解析成javascript物件,Postman測試結果如下:

Body

以新增使用者為例,

修改昨日的create方法如下:

  @Post()
  create(@Body() userDTO: UserDTO){ // userDTO: UserDTO代表userDTO是UserDTO型別
    return `使用者:${userDTO.username}已建立`;
  }

用@Body來接收來自Request body的資料,Postman測試結果如下:


上一篇
Day4-Controller in nest.js(上)-Basics
下一篇
Day6-Provders & Dependency Injection
系列文
讀官網文件邊走邊學nest.js31

尚未有邦友留言

立即登入留言