Programming/웹프로그래밍

[NodeJs] 외부모듈활용 - Express를 활용해 간단한 Framework 만들기. (그 외 유용한 모듈) (3/3)

쌍쌍바나나 2016. 3. 17. 16:45
반응형

기존에는 

var reqHandler = function(req, res) {

res.writeHead(200, {"Content-Type":"text/html"});

res.end("<h1>Welcome to Server.</h1>");

};

var server = http.createServer(reqHandler);

server.listen(8080, function() {

console.log('running on 8080...');

});

로 사용을 했지만. reqHandler를 만들지 않고, express()를 사용했다.

express를 사용하면 


var app = express();

app.use(function(req, res) {

res.send("<h1>Welcome to Server.</h1>");

});


http 모듈만 사용할 경우에는 res.writeHead(), res.end()를 항상 작성해줘야했지만

express를 사용하면 res.send만 사용하면 된다. (이미 writeHead(), end()는 내부에서 동작)


var server = http.createServer(app);

server.listen(8080, function() {

console.log('running on 8080...');

});



var app = express();

app.use(function(req, res, next) {

console.log("url:" + req.url);

next();

});

app.use(function(req, res) {

res.send("<h1>Welcome to Server.</h1>");

});

app.use()는 n번 이상을 사용할 수 있고, 다음 use를 호출하기 위해서는 이전 use 함수에서 next()를 호출해야 합니다. 


모듈 단위로 작업을 하기 위해서는 아래와 같이 할 수 있다. (MVC 모듈로 사용할 수 있는 기반이 마련)
/plus에 대한 작업을 하기 위해서는 req.url =='/plus'를 하면 
localhost:8080/plus 라고 할 경우에는 console.log('doing for plus')가 호출이 될 것이다. 
localhost:8080/minus 라고 할 경우에는 console.log('doing for plus')가 호출이 될 것이다. 
localhost:8080/ 라고 할 경우에는 console.log('url:/')가 호출이 될 것이다. 


app.use(function(req, res, next){
if (req.url == '/plus') {
console.log('doing for plus');
}
next();
});
app.use(function(req, res, next){
if (req.url == '/minus') {
console.log('doing for minus');
}
next();
});
app.use(function(req, res) {
res.send("<h1>Welcome to Server.</h1>");
});

var server = http.createServer(app);
server.listen(8080, function() {
console.log('running on 8080...');
});

GET / POST 를 나누어 보자.

app.get('/div', function(req, res) {
console.log('doing for div');
res.send('<h1>div</h1>');
});

라고 코드를 작성하면 get에 대한 처리를 해주고 응답을해준다. 이때 주위해야할 점은 
app.use에서 next가 없는 function의 위치는 맨 마지막에 가야한다.







morgan (logger) 미들웨어
express에서 사용할 수 있는 Third-party middleware (추가적으로 설치를 해야합니다.
1. 설치하기
npm install morgan (http://github.com/expressjs/morgan)
요청에 따른 로그 출력

var http = require('http');
var express = require('express');
var morgan = require('morgan');

var logger = morgan('combined');
var app = express();
app.use(logger);
app.use(function(req, res) {
res.send('<h1>Logger Test</h1>');
});

var server = http.createServer(app);
server.listen(8080, function() {
console.log("running on 8080.");
});

실행 화면은
::1 - - [17/Mar/2016:06:45:30 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36"
::1 - - [17/Mar/2016:06:45:30 +0000] "GET /favicon.ico HTTP/1.1" 304 - "http://localhost:8080/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36"


combined 포맷 말고 다른 포맷을 사용하고 싶으면 https://www.npmjs.com/package/morgan
에서 참조


winston
npm install winstom
log를 file로 떨어뜨려주는 역할을합니다. 찾아보시길...
console.log를 사용하지 않고 winston.log를 하면 콘솔과 파일에 출력이 된다. 
winston.log('info' 
winston.info 등 다양한 레벨로 사용이 가능하다. 
winston.log('debug'

데이터 베이스, 파일, 원격저장소에 저장또한 가능하니 찾앙보면서 하면 좋을 것 같습니다.


반응형