nodejs 웹서버 구축

nodejs 웹서버 구축 방법에 대해 알아봅니다.

NodeJS 설치에 대해 궁금하신 분은 여기 링크를 참고바랍니다.

nodejs 웹서버 구축 미들웨어

$ npm install express –save

static 미들웨어

$ npm install server-static —save

$ app.use(express.static(path.join(__dirname, ‘public’)));

body-parser 미들웨어

$ npm install body-parser –save


app.use(bodyParser.json()); // application/json 형식으로 전달된 요청 파라미터를 파싱.

app.use(bodyParser.urlencoded({ extended: true })); // application/x-www-form-urlencoded 형식으로 전달된 요청 파라미터를 파싱.

Router 미들웨어


// app.js
var router = express.Router();
.....
router.route('process/login:name').post('function(req,res) {
....
});
app.use('/'.router);
//html.html

<form method="post" action="/process/login/boy">

// 등록되지 않은 패스에 대해 페이지 오류 응답
app.all('*', function(req, res) { res.send(404, '<h1> 페이지를 찾을 수 없음돠. </h1>'); });

express-error-handler 미들웨어

$ npm install express-error-handler –save

// code
var expressErrorHandler = require('express-error-handler');
....

var errorHandler = expressErrorHandler({ static: { '404': './public/html/404.html' }
});

app.use(expressErrorHandler.httpError(404) );

app.use(errorHandler);

....

Using Token


// code
var router = express.Router();

.....

router.route('process/users/:id').get('function(req,res) {

var paramId = req.params.id; console.log('/process/usersdhk 토큰 %s를 사용해 처리함', 

paramId); res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); res.write('<h1> Express 서버에서 응답한 결과입니다.</h1>'); res.write('<div><p>Param Id:'+paramId+'</p>

</div>'); res.end();

});

app.use('/'.router);

사용자가 로그인 상태인지 아닌지 확인하고 싶을 때 쿠키나 세션 사용합니다.

쿠키는 클라이언트 웹 브라우저의 정보,

세션은 웹 서버에 저장되는 정보입니다.

쿠키 처리하기


var cookieParser = require('cookie-parser');
....
app.use(cookieParser());
....
var router = express.Router();
router.route('/process/showCookie').get(function(req, res){
	console.log('/process/showCookie 호출'); 
	res.send(req.cookies);
});
router.route('/process/setUserCookie').get(function(req, res){
	console.log('/process/setUserCookie 호출'); res.cookie('user', { id: 'boy', name: '찰리', authorized: true }); res.redirect('/process/showCookie');
});
app.use('/', router);

설치

$ npm install cookie-parser –save

세션처리하기

로그인하면 세션 생성, 로그아웃하면 세션 삭제됩니다.
로그인하기 전까지 접근을 제한할 수 있습니다.

설치

$ npm install express-session –save


>> code
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
....
app.use(cookieParser());
app.use(expressSession({ secret: 'my key', resave: true, saveUninitialized: true
}));
var router = express.Router();
// session check
router.route('/process/product').get(function(req, res) { console.log('/process/product 호출됨'); if (req.session.user) { res.redirect('/html/product.html'); } else { res.redirect('/html/login2.html'); }
});
app.use('/', router);

login


router.route('/process/login').pose( function(req, res)
{
	console.log('/process/login 호출'); 
	var paramId = req.body.id || req.query.id; 

	var paramPassword = req.body.password || req.query.password;

	if (req.session.user) { 

	console.log('이미 로그인되어 상품 페이지로 이동됩니다.'); 
	res.redirect('/public/product.html');

	} 
	else {
	 **req.session.user** = { id: paramId, name: 'boy', authorized: true }; 
	
	 res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' }); 
	
	 res.write('<h1>로그인 성공</h1>'); 
	
	 res.write('<div><p>Param id: ' + paramId + '</p></div>'); 
	
	 res.write('<div><p>Param password: ' + paramPassword + '</p></div>'); 
	
	 res.write("<br><br> <a href='/process/product'>상품 페이지로 이동하기</a>"); 
	 res.end(); 
	}
});

router.route('/process/logout').get(function(req, res) {
 console.log('/process/logout 호출됨');

 if (req.session.user) { console.log('로그아웃합니다.'); 

 **req.session.destroy**(function(err){ if (err) { throw err;} console.log('세션을 삭제하고 로그아웃되었습니다');

 res.redirect('/public/login2.html'); }); } else { console.log('아직 로그인되어 있지 않습니다.'); 

	res.redirect('/public/login2.html'); }
});

Javascript

Array

  • push() : 배열의 끝에 요소를 추가합니다.
  • pop() : 배열의 끝 요소를 삭제합니다.
  • unshift() : 배열의 앞에 요소를 추가합니다.
  • shift() : 배열의 앞에 요소를 삭제합니다.
  • splice(index, removeCount, [Object]) : 여러개의 객체를 요소로 추가하거나 삭제합니다. -> ex> splice(2,0,..) : 2인덱스부터 객체 삽입.
  • splice(index, copyCount) : 여러 개의 요소를 잘라내어 새로운 배열 객체로 만듭니다. -> ex> splice(2,2) : 2인덱스 부터 2개 삭제
  • delete : 배열 요소를 삭제합니다. -> ex> delete Users[1]; 1인덱스 배열 요소 삭제. 데이터만 삭제되어 배열 사이즈는 변동 없음.

Example

Users.splice(1,0,{name:'bear', age:25});
console.log('splice()로 한개를 1인덱스에 추가한 후;);
console.dir(Users);
Users.splice(2,1);
console.log('splice()로 2인덱스 한개 삭제한 후;);
console.dir(Users);

slice(int startindex, int endindex)

var Users2 = Users.slice(1,3); var User3 = User2.slice(1);

callback


function add(a, b, callback){ var result = a+b; callback(result);
}
add(10,10, function(result){ console.log('resule : %d', result);
});

function add(a,b, callback)
{ var result = a + b; callback(result); var history = function() { return a+'+'+b+'='+result; } return history;
}
var add_history = add(10, 10, function(result) { console.log('add %d', result);
});
conslog.log('result : ' + add_history());

function add(a,b, callback)
{ 
	var result = a + b; callback(result); 
	var count = 0; 
	var history = function() {
		 count++; return count + ': ' + a+'+'+b+'='+result;
	}
	 return history;
}
	var add_history = add(10, 10, function(result) { console.log('add %d', result);
});
conslog.log('result : ' + add_history());
conslog.log('result : ' + add_history());
conslog.log('result : ' + add_history());

Prototype


function Person(name ,age) { 
	this.name = name; this.age = age;
}

Person.prototype.walk = function(speed) {
 console.log(speed + 'km');
}
var person01 = new Person('P_1', 20);
var person02 = new Person('P_2', 22);
person01.walk(10);

prototype 속성을 추가하면 인스턴스 객체를 만들 때 메모리를 효율적으로 관리할 수 있습니다.

Back to top