4주 프로젝트 Error Handling #1
4주 프로젝트를 진행하면서 수많은 에러들을 만날텐데, 4주 프로젝트가 진행된지 2주가 지나서야 에러 핸들링을 어떻게했는지 남기면 좋을거같다는 생각이 들어 이제부터라도 남겨보려고한다.
const storage = multerS3({
s3: s3,
bucket: process.env.S3_BUCKET_NAME,
contentType: multerS3.AUTO_CONTENT_TYPE,
acl: 'public-read',
metadata: function (req, file, cb) {
cb(null, { fieldName: file.fieldname });
},
key: function (req, file, cb) {
if (file.originalname.match(/\.(mp4|MPEG-4|mkv)$/)) {
cb(null, `reviewVideo/${Date.now()}_${file.originalname}`);
} else if (req.files.keyboardImg) {
cb(null, `keyboards/${Date.now()}_${file.originalname}`);
} else if (req.files) {
cb(null, `review/${Date.now()}_${file.originalname}`);
} else {
cb(null, `profile/${Date.now()}_${file.originalname}`);
}
},
});
multer S3 를 이용하여 사진이 업로드 될 때, S3에 어떤 이미지가 어떤 폴더로 저장될지 작성해놓은 코드다. key부분을 살펴보면 file의 확장자가 mp4, mepg-4 등 음악이나 동영상일이면 S3의 reviewVideo 로 저장이되며 밑에도 비슷한 메커니즘의 코드들이다.
처음 테스트를 진행할때 user profile 을 수정해보려고 사진을 넣었는데 req.files.keyboardImg 가 undefined 라고 오류가 떳다. 내 짧은 지식으로는 req.files.keyboardImg 가 없으면 다음 조건문으로 넘어갈줄알았지만 그렇지않았다. 그래서 구글링을 하다가 찾아낸게 Optional Chaining 이라는 것이다.
먼저 optional chaining 이란,
optional chaining 연산자 ?. 는 체인의 각 참조가 유효한지 명시적으로 검증하지 않고,
연결된 객체 체인 내에 깊숙이 위치한 속성 값을 읽을 수 있다. ?. 연산자는 . 체이닝 연산자와
유사하게 작동하지만, 만약 참조가 nullish (en-US) (null 또는 undefined)이라면,
에러가 발생하는 것 대신에 표현식의 리턴 값은 undefined로 단락된다. 함수 호출에서 사용될 때,
만약 주어진 함수가 존재하지 않는다면, undefined를 리턴한다.
출처 : MDN
쉽게 설명하자면 만약 참조가 null or undefined라면 에러가 발생하지않고 그냥 undefined 가 리턴된다는것이다.
optional chaining 을 토대로 수정한 후 테스트를 해보니 문제없이 작동되었다.
const storage = multerS3({
s3: s3,
bucket: process.env.S3_BUCKET_NAME,
contentType: multerS3.AUTO_CONTENT_TYPE,
acl: 'public-read',
metadata: function (req, file, cb) {
cb(null, { fieldName: file.fieldname });
},
key: function (req, file, cb) {
if (file.originalname.match(/\.(mp4|MPEG-4|mkv)$/)) {
cb(null, `reviewVideo/${Date.now()}_${file.originalname}`);
} else if (req.files?.keyboardImg) {
cb(null, `keyboards/${Date.now()}_${file.originalname}`);
} else if (req.files) {
cb(null, `review/${Date.now()}_${file.originalname}`);
} else {
cb(null, `profile/${Date.now()}_${file.originalname}`);
}
},
});
Author And Source
이 문제에 관하여(4주 프로젝트 Error Handling #1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@goodbsm2421/4주-프로젝트-Error-Handling-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)