catsController.ts
> GET localhost:3000/123
@Get(':id')
getOneCat(@Param() param) {
console.log(param) // { id: '123' } 결과값이 나오게 된다.
return 'get one cat apl'
}
@Get(':id')
getOneCat(@Param('id') param) { // 명확하게 키 값을 알려주면
console.log(param) // 123 벨류값이 나오게 된다.
// pipes를 이용하여 id가 들어왔을 때 number로 타입변환을 해줄 수 있다.
console.log(typeof param) // 원래는 타입이 string이다.
return 'get one cat apl'
}
@Get(':id')
getOneCat(@Param('id', ParseIntPipe) param: number) {
console.log(param) // 123
console.log(typeof param) // number 변환됨. id가 number type으로 사용하는 경우가 많다.
return 'get one cat apl'
}
- 만약 GET localhost:3000/abc Int 로 전달 되지 않는 경우 Validation error를 낼 수 있다.
- 요청이 들어왔을 때 ParseIntPipe로 number로 타입변환을 해주고 유효성검사도 해주면 일석이조가 된다.
- GET localhost:3000/abc postman 요청할 경우 Validation 에러가 나옴.
{
"success": false,
"timestamp": "2023-07-09T12:02:00.278Z",
"message": "Validation failed (numeric string is expected)",
"error": "Bad Request",
"statusCode": 400
}
사용자의 요청에 의한 특정한 데이터가 들어오면 하나의 변환, 유효성 검사를 수행하게 되는데
(1) 하나의 input이 들어오면 특정 로직을 수행해서 output을 밷는다.
(2) 그 output은 다음 함수로 들어가서 output을 밷는다.각각의 함수들은 자신만의 기능을 수행해서 다음 함수에 넘겨주기만 하는것이다.
(3) 하나의 변환이 된 새로운 데이터를 파이프에 넣는다
(4) 다시 변환 또는 유효성 검사를 한다.
(여기서 실패할경우 exception으로 빠지게 됨 성공 시 원하는 결과가 하나로 나옴)
(5) 원하는 결과가 하나로 나와 비지니스 로직에 들어가 실행하게된다.
PositiveIntPipe.ts
// transform 이라는 함수가 있음. 이 함수의 결과값이 파이프의 결과값이 되는것임.
import { HttpException, Injectable, PipeTransform } from '@nestjs/common';
@Injectable()
export class PositiveIntPipe implements PipeTransform {
transform(value: number) {
// 만약 벨류가 음수라면 에러를 밷게 로직 짜기
if (value < 0) {
throw new HttpException('value > 0', 400);
}
return value;
}
}
catsController.ts
...pipes(PipeTransform<any, any> 되있는데 ...pipes 되있다. 아래같이 파이프로 쭉 이을 수 있다.@Get(':id')
getOneCat(@Param('id', ParseIntPipe, PositiveIntPipe) param: number) {
return 'get one cat apl'
}
덕분에 좋은 정보 얻어갑니다, 감사합니다.