http 파일 다운로드(request-promise) 후 파일 저장(fs.createwritestream, pipe) 시 error handling 질문입니다.
조회수 965회
안녕하세요.
nodejs 로 웹에서 파일 다운로드 후 압축해제를 하는 기능을 만들어보고 있는데요.
베이스 코드는 다 짰는데 리팩토링 하는 과정에서 에러 핸들링 하는 방식이 궁금해서 질문 드립니다.
일단 비동기 방식을 처리하기 위해 async와 await을 사용하였고
동작 방식은
1) request 모듈로 파일을 다운로드 후
2) pipe를 연결하여 createWriteStream 으로 파일을 쓰는 형태입니다.
(request와 stream은 둘다 promise 모듈 패키지를 설치하였습니다.)
사용하는_프로그래밍언어
const rp = require('request-promise'),
promise = require('bluebird'),
fs = require('async-file');
function b() {
return new promise(async (resolve, reject) => {
const fw = fs.createWriteStream('a.html');
let options = {
method: 'GET',
uri: 'https://www.naver.com',
qs: undefined,
body: undefined,
rejectUnauthorized: false,
json: true
};
await rp(options)
.pipe(fw)
.on('error', err => {
console.log('==pipe err');
reject(err);
})
});
}
async function a() {
try {
//await 있는 async 호출
await b();
console.log('file write end!, async check');
} catch (err) {
//await 은 promise error 발생시 아래 에러로 떨어진다.
console.log('==catch err');
console.log(err);
}
}
a().then(() => {
console.log('==finish!');
});
여기서 에러 핸들링 처리를 하려고 하는데
1) request에서 잘못된 URL을 넣었을때 발생하는 에러에 대한 핸들러를 어떻게 구성해야 될지 모르겠습니다.
아래와 같이 마지막에 catch로 에러 핸들링해도 문제이고
await rp(options)
.pipe(fw)
.on('error', err => {
console.log('==pipe err');
reject(err);
}).catch(err => {
reject(err)
});
promise 뒤에 에러처리를 할경우 에러는 잡히는데 뒤에 filestream pipe가 동작을 하지 않습니다.
await rp(options)
.catch(err => {
reject(err);
})
.pipe(fw)
.on('error', err => {
console.log('==pipe err');
reject(err);
});
어떤 방식으로 구현을 해야 request에 대한 에러가 발생했을때 처리가 가능할지 궁금하여 질문 드립니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력