본문 바로가기

Node.js

(6)
Node.js Express 서버 express-device 디바이스 확인 express 프레임워크를 사용한다면 express-device 패키지를 사용해 디바이스를 체크할 수 있다. 참고 문서 : https://www.npmjs.com/package/express-device express-device 패키지 설치 npm install exress-device --save var device = require('express-device'); var app = express(); app.use(device.capture()); 참고한 문서를 보면 이렇게 했을때 request 객체에 device 속성을 사용할 수 있다고 한다. request.device에서 사용할 수 있는 프로퍼티는 두가지가 있다. type : 디아비스 타입을 리턴한다. 이 중에서 나는 desktop과 phon..
Node.js Express 서버에서 해외 ip 처리하기 배포되어있는 사이트에서 서버가 자꾸 꺼지는 이슈가 있어서 백그라운드로 실행 하지않고 콘솔을 지속적으로 확인했더니 무지성으로 계속 리퀘스트 요청이 들어오는걸 확인했다. 때문에 nginx에서 geoip를 이용해 해외 아이피를 처리하고싶었지만 유료인 nginx plus만 geoip 설정이 가능했다. 따라서 express 서버단에서 처리하기로 했다. https://xn--3e0bx5euxnjje69i70af08bea817g.xn--3e0b707e/jsp/statboard/IPAS/ovrse/natal/IPaddrBandCurrent.jsp KRNIC 한국 인터넷 정보센터에서 국가별 ip에 대한 csv파일을 얻을수 있다. DB에 넣어서 아이피 대역대를 조회해서 처리할 수 있지만 외부 api를 발견했다. https..
Node.js helmet 적용하기 npm의 helmet 패키지를 사용해 각종 공격에 대비할 수 있다. helmet 설치 npm install helmet --save 아래 페이지에 helmet 패키지에 대한 설명이 있다 https://www.npmjs.com/package/helmet var helmet = require('helmet'); app.use(helmet()); app.use(helmet())을 사용하면 helmet의 아래 기능을 모두 디폴트 값으로 사용하겠다는 의미다. 패키지 설명 페이지를 참고해 보면 app.use(helmet())과 아래 코드가 같은 의미인걸 알수있다. app.use(helmet.contentSecurityPolicy()); app.use(helmet.dnsPrefetchControl()); app.us..
Node.js 클라이언트 IP 가져오기 request-ip 로그에 ip를 넣기위해 클라이언트 ip를 가져와야 하는 이슈가 생겼다. request-ip 미들웨어가 있어서 사용하기로 한다. npm install request-ip --save 사용법은 매우 간단하다. var requestIp = require('request-ip'); let ip = requestIp.getClientIp(req); getClientIp로 클라이언트의 ip를 얻을 수 있다. 하지만 그림처럼 DB에 IPv6 방식으로 ip가 들어가있다. express 서버에서 IPv4로 설정해줘야한다. 매우 간단하다. listen할때 포트 다음 인자로 '0.0.0.0'만 추가해주면 된다. => listen(port, '0.0.0.0') app.listen(port, '0.0.0.0')
Node.js Mysql2로 async/await 사용하기 푸핫을 개발하면서 리뷰별로 이미지 리스트를 못담는 이슈가 생겼다. 스프링처럼 Mybatis에 resultMap을 사용하면 쉽게 Collection에 넣을 수 있지만 node.js에서 mysql을 orm 없이 개발하다 보니 해결하는데 시간이 오래걸렸다. 기존에 mysql 미들웨어를 사용했고 소스는 아래와 같았다. router.get('/api/review/list/:seq', (req, res) => { let sql = 리뷰 select 쿼리 con.query(sql, (err, result) => { if(err){ return res.status(500).send({error : 'database failure'}); } const dataArray = new Array(); for (var i = ..
Express multipart/form-data 파일 받기 express + react로 사이트 개발 중 이미지 업로드를 위해 Content type을 multipart/form-data으로 전송하면 서버에서 request body에 데이터가 undefined로 되는 이슈가 생겼다. node에서 multipart/form-data를 사용하기위해 Multer라는 미들웨어를 사용하기로 했다. https://github.com/expressjs/multer/blob/master/doc/README-ko.md 여기서 자세한 properties를 볼 수 있다. Multer 설치 >npm install multer --save 작성한 코드 var multer = require("multer"); const upload = multer({ dest: 'uploads/' })..