다양한 노드 모듈
다양한 모듈들을 사용해보자
1. body-parser
– 위의 모듈은 이렇게 request body 객체안의 데이터를 json형식으로 인코딩 할 수 있게 만들어 줍니다. 즉 요청 데이터 처리
아래의 내용 추가1
2
3
4
5
6
7
8
9
10
11
12
13
14var bodyParser = require('body-parser');
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
//포스트맨에서 응답을 받기 위해서 아래와 같이 작성
app.use(function (req, res) {
res.setHeader('Content-Type', 'text/plain')
res.write('you posted:\n')
res.end(JSON.stringify(req.body, null, 2))
})
위와 같이 진행하게 되면1
2
3
4
5
6
7
8
9
10
11
12req
{
"user_id" : "parkijin",
"password" : 123
}
res
you posted:
{
"user_id": "parkijin",
"password": 123
}
테스트 정상
2. co
콜백 지옥을 벗어나게 해주는!! 추후 코딩 예제
3. compression
응답 압축 지원
4. cookie-parser
쿠키를 사용 할수 있게
1 | var cookieParser = require('cookie-parser'); |
5. cuid
uuid와 같은 랜덤 스트링값 생성
1
2 var cuid = require('cuid');
console.log( cuid() );
6. errorhandler
에러 핸들러(http://expressjs.com/ko/guide/error-handling.html)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 var bodyParser = require('body-parser');
var methodOverride = require('method-override');
app.use(bodyParser());
app.use(methodOverride());
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);
이 예에서 일반 logErrors는 요청 및 오류 정보를 stderr에 기록할 수도 있으며, 예를 들면 다음과 같습니다.
function logErrors(err, req, res, next) {
console.error(err.stack);
next(err);
}
또한 이 예에서 clientErrorHandler는 다음과 같이 정의되며, 이 경우 오류는 명시적으로 그 다음 항목으로 전달됩니다.
function clientErrorHandler(err, req, res, next) {
if (req.xhr) {
res.status(500).send({ error: 'Something failed!' });
} else {
next(err);
}
}
“모든 오류를 처리하는(catch-all)” errorHandler 함수는 다음과 같이 구현될 수 있습니다.
function errorHandler(err, req, res, next) {
res.status(500);
res.render('error', { error: err });
}
7. express
익스프레스(Express.js)는 노드(NodeJS) 상에서 동작하는 웹 개발 프레임웍입니다.
8. express-request-id
Generate UUID for request and add it to X-Request-Id header. In case request contains X-Request-Id header, uses its value instead.
9. express-winston , winston, winston-daily-rotate-file
node기반의 logging라이브러리
10. helmet
http 헤더설정을 바꿔주는 모듈
1 | const helmet = require('helmet'); |
helmet으로 보안 관련 헤더 9개의 설정을 바꿔 줄 수 있습니다.
- csp: Content-Security-Policy 헤더를 설정하여 XSS(Cross-site scripting) 공격 및 기타 교차 사이트 인젝션을 예방합니다.
- hidePoweredBy: X-Powered-By 헤더를 제거합니다.
- hpkp: Public Key Pinning 헤더를 추가하여, 위조된 인증서를 이용한 중간자 공격을 방지합니다.
- hsts: 서버에 대한 안전한(SSL/TLS를 통한 HTTP) 연결을 적용하는 Strict-Transport-Security 헤더를 설정합니다.
- ieNoOpen: IE8 이상에 대해 X-Download-Options를 설정합니다.
- noCache: Cache-Control 및 Pragma 헤더를 설정하여 클라이언트 측에서 캐싱을 사용하지 않도록 합니다.
- noSniff: X-Content-Type-Options 를 설정하여, 선언된 콘텐츠 유형으로부터 벗어난 응답에 대한 브라우저의 MIME 가로채기를 방지합니다.
- frameGuard: X-Frame-Options 헤더를 설정하여 clickjacking에 대한 보호를 제공합니다.
- xssFilter: X-XSS-Protection을 설정하여 대부분의 최신 웹 브라우저에서 XSS(Cross-site scripting) 필터를 사용하도록 합니다.
참조
http://expressjs.com/ko/advanced/best-practice-security.html
11. lodash
배열과 객체 모두 사용가능한 메소드
12. method-override
Method-override는 REST API에서 PUT과 DELETE 메소드를 사용할 수 있게 합니다.
13. moment
날짜 관련 모듈
1 | console.log(`연도 => ${moment().year()}`) |
- morgan
로그 기록을 남기는 모듈
mysql, mysql2
request
rest client, require(‘http’)보다 뛰어난듯
1 | var request = require("request"); |
- root-require
Node.js 에서 require(‘경로’); 를 활용하면 그 .js 파일 기준으로 상대 경로에 위치한 js 파일을 가져와 쓸 수 있습니다.
1 | var config = require( path + '/config/db' ); |
- sequelize, sequelize-cli
Sequelize.js는 Node.js 기반의 ORM(Object-Releational-Mapping)이다.