NodeJs에서 Parse Error: HPE_HEADER_OVERFLOW 발생

x-ray(node moudle)를 이용해서 크롤링을 개발하고 있던 중, 다음과 같은 오류를 만나게 되었다.

(node:63533) UnhandledPromiseRejectionWarning: Error: Parse Error
    at Socket.socketOnData (_http_client.js:442:20)
    at Socket.emit (events.js:189:13)
    at addChunk (_stream_readable.js:284:12)
    at readableAddChunk (_stream_readable.js:265:11)
    at Socket.Readable.push (_stream_readable.js:220:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:94:17)
     bytesParsed: 6545,
  code: 'HPE_HEADER_OVERFLOW',

이 오류는 3개의 사이트중 1개의 사이트에서만 발생하였다.

원인을 파악하기 위해 검색을 하다 다음과 같은 내용을 확인하였다.

Node.js의 http 80KB의 Header 크기 제한을 가지고 있고 만약 큰 Header 크기가 필요 하다면, 명령을 실행시 특정 argument를 추가 해야 한다.

해결책은 다음과 같다!

실행하는 node 명령와 함께 --max-http-header-size=크기 argument를 추가 해라

예제)

$> node --max-http-header-size=81000 app.js

에러가 안날때 까지 최대 http header 크기를 키우면 된다.

근데... 이건 에러나는 사이트가 문제 아닌가? 80KB를 넘는 헤더를 왜 넘기지??

참고자료

Posted by lahuman

express에서 stream을 이용하여 파일 다운로드 하기

파일다운로드를 하기위해서는 스트림을 이용해야 한다.

const mime = require('mime-types');

// set header for download
let mimeType = mime.lookup('news_20190501.pdf');
res.setHeader('Content-disposition', 'attachment; filename=' + 'news_20190501.pdf');
res.setHeader('Content-type', mimeType);
fs.createReadStream(__basedir + '/public/files/download/pdf/news_20190501.pdf').pipe(res);

다음과 같이 하면 파일을 스트림을 통해서 다운로드할수 있다.

같이 일하는 분이 알려주심!

자바나 노드나 많이 다르지는 않다!

Posted by lahuman

nodejs package.json의 모듈 업데이트 하기!

npm-check-updates을 이용하여 package.json에 등록된 모듈들을 의존성에 알맞게 최신 버젼으로 업데이트 할 수 있다.

설치 후 실행은 다음과 같다.

# global로 npm-check-updates 설치
$> npm i -g npm-check-updates
# 프로젝트(package.json과 동일한) 디렉토리에서 다음 명령어 실행
$> ncu -u
Upgrading /Users/admin/myProject/package.json
[====================] 17/17 100%

 app-root-path     ^2.1.0  →   ^2.2.1
 cookie-parser     ~1.4.3  →   ~1.4.4
 debug             ~2.6.9  →   ~4.1.1
 dotenv            ^7.0.0  →   ^8.0.0
 express          ~4.16.0  →  ~4.16.4
 express-session  ^1.15.6  →  ^1.16.1
 helmet           ^3.16.0  →  ^3.17.0
 http-errors       ~1.6.2  →   ~1.7.2
 morgan            ~1.9.0  →   ~1.9.1
 puppeteer        ^1.13.0  →  ^1.15.0

Run npm install to install new versions.

# 업데이트된 결과를 설치
$> npm install

자주는 아니더라도, 가끔씩은 모듈을 업데이트 하자!

참고자료

Posted by lahuman