다양한 노드 모듈

다양한 모듈들을 사용해보자

1. body-parser

– 위의 모듈은 이렇게 request body 객체안의 데이터를 json형식으로 인코딩 할 수 있게 만들어 줍니다. 즉 요청 데이터 처리

아래의 내용 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var 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
12
req
{
"user_id" : "parkijin",
"password" : 123
}

res
you posted:
{
"user_id": "parkijin",
"password": 123
}

테스트 정상

2. co

콜백 지옥을 벗어나게 해주는!! 추후 코딩 예제

3. compression

응답 압축 지원

쿠키를 사용 할수 있게

1
2
3
4
var cookieParser = require('cookie-parser');

// load the cookie-parsing middleware
app.use(cookieParser());

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
2
3
const helmet = require('helmet');
app.use(helmet());
app.disable('x-powered-by');

helmet으로 보안 관련 헤더 9개의 설정을 바꿔 줄 수 있습니다.

  1. csp: Content-Security-Policy 헤더를 설정하여 XSS(Cross-site scripting) 공격 및 기타 교차 사이트 인젝션을 예방합니다.
  2. hidePoweredBy: X-Powered-By 헤더를 제거합니다.
  3. hpkp: Public Key Pinning 헤더를 추가하여, 위조된 인증서를 이용한 중간자 공격을 방지합니다.
  4. hsts: 서버에 대한 안전한(SSL/TLS를 통한 HTTP) 연결을 적용하는 Strict-Transport-Security 헤더를 설정합니다.
  5. ieNoOpen: IE8 이상에 대해 X-Download-Options를 설정합니다.
  6. noCache: Cache-Control 및 Pragma 헤더를 설정하여 클라이언트 측에서 캐싱을 사용하지 않도록 합니다.
  7. noSniff: X-Content-Type-Options 를 설정하여, 선언된 콘텐츠 유형으로부터 벗어난 응답에 대한 브라우저의 MIME 가로채기를 방지합니다.
  8. frameGuard: X-Frame-Options 헤더를 설정하여 clickjacking에 대한 보호를 제공합니다.
  9. 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
console.log(`연도 => ${moment().year()}`)     
//연도 => 2018
console.log(`월 (※ 0〜11의 값) => ${moment().month()}`)
//월 (※ 0〜11의 값) => 0
console.log(`일 => ${moment().date()}`)
//일 => 15
console.log(`요일 => ${moment().day()}`)
//요일 => 1
console.log(`시 => ${moment().hours()}`)
//시 => 10
console.log(`분 => ${moment().minutes()}`)
//분 => 57
console.log(`초 => ${moment().seconds()}`)
//초 => 2
console.log(`밀리 초 => ${moment().milliseconds()}`)
  1. morgan

로그 기록을 남기는 모듈

  1. mysql, mysql2

  2. request

    rest client, require(‘http’)보다 뛰어난듯

1
2
3
4
5
6
7
8
9
10
11
var request = require("request");

request({
uri: "http://www.naver.com",
method: "GET",
timeout: 10000,
followRedirect: true,
maxRedirects: 10 },
function(error, response, body) { console.log(body);
}
);
  1. root-require

Node.js 에서 require(‘경로’); 를 활용하면 그 .js 파일 기준으로 상대 경로에 위치한 js 파일을 가져와 쓸 수 있습니다.

1
var config = require( path + '/config/db' );
  1. sequelize, sequelize-cli

    Sequelize.js는 Node.js 기반의 ORM(Object-Releational-Mapping)이다.