-
update하면서 마주했던 에러 몇 가지언어/Javascript 2023. 8. 24. 14:57
1. header로 넘긴 정보를 어떻게 body로 받아왔지?
컨트롤러에서 아래 코드처럼 @Body()로 값을 넘겨줬다. 그리고 postman에서 header에다가 token정보를 넣어 보내줬는데, 얘를 body에서 받아와야한다.
updateInfo( @Body() updateInfoInput: UpdateInfoInput, // @Headers('Authorization') auth: string, ) { const accessToken = updateInfoInput.tokens.accessToken; return this.InfoService.updateInfo({ updateInfoInput, accessToken, }); }
주석한것처럼 @Headers() 로 값을 받아와도 된다. (Service말고 Controller에서 받아야함)
근데 우리는 Body에서 받아오고 있었고, 알고보니 사전에 정의해둔 Middleware코드에서 Header정보를 Body로 넘겨주고 있었던 것이다. 해당 Middleware를 적용하고 싶으면 app.module에서 아래처럼 내가 사용하는 path를 추가해야한다.
configure(consumer: MiddlewareConsumer) { consumer .apply(onlyAccessMiddleware) .forRoutes( { path: '/lectureInfo', method: RequestMethod.PUT }, ); }
2. 아직도 이해가 잘 안가는 것 중 하나. 값을 객체로 넘겨줄것인가, 그냥 넘겨줄 것인가, 스프레드 연산자로 받을것인가...
이것 때문에 계속 애를 먹었던 것이 this.repository.findOne({where: {id값}}) 을 사용해야하는데, 이 부분을 따로 함수로 빼서 정의하고 필요할 때마다 불러서 검증하는 것이 좋다고 했다. 그래서 기존에 정의되어있던
async 함수1({ id }): Promise<A> { const result = await this.Repository.findOne({ where: { id }, }); return result; }
이거를 가져다 쓰려했다.
내가 가져다 쓸때는 아래처럼 썼었고 에러가 났다.
const currentLectureInfo = await this.함수1(updateInfoInput.id);
안되는 이유1. 파라미터를 받을 때 this.함수1({파라미터.id})의 객체형태로 받았어야했고,
안되는 이유2. 동일한 이름의 파라미터로 넘겨줘야하는데 나는 계속 파라미터.id 의 raw한 값을 넘겨주려고 했다.
const id = updateInfoInput.id const currentLectureInfo = await this.함수1({id});
로 넘겨주니 실행이 잘 됐다.
안되는이유1처럼 객체가 아니게 넘겨주면 처음 실행할때는 update가 실행되지만 그 뒤에 값을 변경해서 넣으면 그 전에 실행되었던 인자가 계속 update에 적용이 됐다.
여기서 계속 ',' expected오류가 났었는데
그 이유를 추측해보면 해당 함수가 필요한 id외에 다른 문자가 들어갔으니 해당 정보는 다른 정보로 인식하고 , 로 구분지을것을 요구하는 것 같다.
반응형'언어 > Javascript' 카테고리의 다른 글
[typescript]class-validator 에러 처리 (0) 2023.09.01 POST : Cannot read properties of undefined (reading 'length') (0) 2023.08.30 [NodeJS] Error [ERR_REQUIRE_ESM]: require() of ES Module ~ from ~ not supported. 에러 (0) 2023.08.23 typeorm repository.delete 삭제 안될 때 (0) 2023.08.22 Argument of type '{ a: A; }' is not assignable to parameter of type 'DeepPartial<"entity">[]'. (0) 2023.08.17