Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Express
- Queue
- TypeScript
- class
- Bull
- mongoose
- MySQL
- GIT
- nodejs
- Sequelize
- nestjs
- AWS
- Dinosaur
- MongoDB
- flask
- react
- cookie
- game
- 게임
- OCR
- jest
- dfs
- typeORM
- 정렬
- Python
- JavaScript
- 공룡게임
- Nest.js
- 자료구조
Archives
- Today
- Total
포시코딩
2월21일 - nestjs-form-data 본문
728x90
개요
React에서 Nest.js 서버로 axios를 통해 글쓰기 요청을 보내는 과정에서
이미지 파일도 같이 보낼걸 생각해
원래
axios
.post('http://localhost:8080/boards', {
title,
content,
})
이렇게 보냈다면
formData를 써서
const formData = new FormData();
formData.append('title', title);
formData.append('content', content);
formData.append('file', file);
axios
.post('http://localhost:8080/boards', formData)
이렇게 보내게끔 수정했는데
이상하게 Nest.js 서버의 controller에서 받는 body값이 계속 빈 {}로 전달되고 있었다.
@Post()
createBoard(@Body() boardData) {
console.log(boardData); // {}
return;
}
Nest.js에서 formData를 못받는 이유가 따로 있을거라 생각해
방법이 없나 찾아보니
패키지를 통해 해결할 방법이 있었다.
해결 방법
https://www.npmjs.com/package/nestjs-form-data
nestjs-form-data 패키지를 사용하면 간단하게 해결할 수 있다.
module에서 NestjsFormDataModule을 import에 넣고
controller에서 데코레이터를 통해 formData를 받게끔 선언하면 된다.
module
@Module({
imports: [
NestjsFormDataModule,
],
controllers: [BoardsController],
providers: [BoardsService]
})
export class BoardsModule {}
controller
@Post()
@FormDataRequest()
createBoard(@Body() boardData) {
console.log(boardData);
return;
}
이렇게 함으로서 formData를 통해 이미지 파일과 다른 데이터까지 같이 받을 수 있다.
+ 추가
nestjs-form-data 사용 시 dto를 활용하지 못한다는 문제로 인해
nestjs-form-data를 사용하지 않고 multer와 함께 dto 상의 설정 변경을 통해
데이터를 받는 방법을 알아내 아래 링크에 정리했다.
728x90
'TIL' 카테고리의 다른 글
2월23일 - debounce, throttle (0) | 2023.02.23 |
---|---|
2월22일 - Authentication, Authorization 차이 (0) | 2023.02.22 |
2월20일 - Linked List 구현 심화 (Python) (0) | 2023.02.20 |
2월19일 - Queue, Stack, Linked List 구현하기 (Python) (0) | 2023.02.20 |
2월18일 - Naver Maps API (1) | 2023.02.19 |