codestates / codestates/GongJang
Server Error Handling : Node.js Fs 모듈 동기/비동기 차이
- Dominant language
- JavaScript
- Stars
- 0
- Forks
- 2
- PR merge metrics
- No merged PRs in 30d
Description
## 어떤 에러인가요?
- 유저가 게시글 작성 시 용량이 큰 이미지를 업로드 하면 `Maximum callstack` 에러가 발생함
## 에러 메시지
`RangeError: Maximum call stack size exceeded `
## 에러 핸들링 방법
1. 용량이 큰 이미지파일을 업로드하는 경우, 해당 에러가 발생한다는 걸 알게 됨
2. 처음에는 용량이 문제라 생각했으나, 에러에 대해서 검색하던 중, 버퍼 데이터를 string 타입으로 인코딩하여 보내면 해결된다는 걸 알게 됨.
3. 인코딩 방법에 대해서 검색하던 중, base64로 인코딩하면 배열형태가 아니라, string 타입으로 보낸다는 걸 알게 됨.
4. 기존 코드가 base64로 인코딩 시키지 못하고 있었다는 걸 알게 됨
[ 기존 코드 ]
```javascript
let convertImg;
try {
convertImg = fs.readFileSync(profile_image, (err, data) => {
return Buffer.from(data).toString('base64');
})
} catch {
console.log(convertImg);
res.status(500).send("서버에 오류가 발생했습니다")
}
console.log(convertImg);
```
5. fs 모듈에서 동기 메소드를 사용할 경우, 인자에 콜백함수를 받지 못함을 알게 됨.
6. 아래와 같이 수정하니 에러가 해결 됨.
[ 수정 코드 ]
```javascript
let convertImg;
try {
buffer = fs.readFileSync(profile_image);
convertImg = Buffer.from(buffer).toString('base64');
} catch {
console.log(convertImg);
return res.status(500).send("유저의 프로필 이미지를 불러오는데 실패했습니다")
}
```
## 에러 핸들링을 위해 참고한 레퍼런스 링크
[공식문서](https://nodejs.org/dist/latest-v14.x/docs/api/fs.html#fs_fs_readfilesync_path_options)
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.