Programming/Javascript

NodeJs, Express 모듈을 사용해서 간단하게 DB에서 목록 불러오기

Figo Kim 2013. 1. 29. 01:57
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

아고 벌써 새벅 1시 반이네요,,

언능 포스팅 하고 자야것습니다.


Node.js에서 express 모듈을 사용하는법은 뭐,,찾아보면 다 많이들 나옵니다.


간략하게 순서만 정리하면,


1. npm install -g express


2. express <project name>


3. cd <project name> --> 해당 폴더로 이동 후,


4. npm install


5. node app --> 서버 실행.


뭐..여기까지는 그다지 어렵지 않다..ㅎㅎ


기본적으로 프로젝트를 생성하면 아래와같이 app.js 파일이 생성된다.


**  app.js **

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes');

var app = module.exports = express.createServer();

// Configuration

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

// Routes

app.get('/', routes.index);

app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);



여기에 내가 추가한것은 routes 방법을 index.js 파일하나에서 처리하는게 아니라 여러 파일에서 처리하도록 하는것이당.


routes 선언을 다음과 같이 해주면 된다.

var routes = {
	index: require('./routes').index,
	life : require('./routes/life.js').life
}



// Routes
// 이제 이러면 각각 route별로 필요시 파일을 따로 만들 수 있다.
app.get('/', routes.index);
app.get('/life',routes.life);


그 다음으로, db에서 간단하게 목록 불러오기다..


따로 파일을 만들기 귀찮아서 Index 라우트에서 사용하는 index뷰에서 보려주는걸로 마무리..


/*
 * GET home page.
 */
var mysql      = require('mysql');
var dbconn = mysql.createConnection(
{
    host:'xxx.bbb.com',
    user:'aaaa',
    password:'1234',
    database:'MyDBName'
});

exports.index = function(req, res){
	dbconn.connect();
	dbconn.query('SELECT * FROM xe_livexe_documents LIMIT 0 , 30', function(err, rows, fields) {
		if (err){
		  	throw err;
		}
		res.render('index', { title: 'Inlinepark',myList:rows });
	});
	
	dbconn.end();
};


일단 정상적으로 목록은 나온다~~!

안나오면 알아서들 해결하시고,,

문제는 새로고침하면 요로코롬 에러가 뜬다..


Error: Cannot enqueue Handshake after invoking quit. at Protocol._validateEnqueue (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\mysql\lib\protocol\Protocol.js:115:16) at Protocol._enqueue (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\mysql\lib\protocol\Protocol.js:84:13) at Protocol.handshake (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\mysql\lib\protocol\Protocol.js:37:41) at Connection.connect (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\mysql\lib\Connection.js:37:18) at exports.index (D:\Workspaces\NodeJs_Chapter9\HelloExpress\routes\index.js:15:9) at callbacks (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\express\lib\router\index.js:272:11) at param (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\express\lib\router\index.js:246:11) at pass (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\express\lib\router\index.js:253:5) at Router._dispatch (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\express\lib\router\index.js:280:5) at Object.middleware [as handle] (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\express\lib\router\index.js:45:10) -------------------- at Handshake.Sequence (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\mysql\lib\protocol\sequences\Sequence.js:15:21) at new Handshake (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\mysql\lib\protocol\sequences\Handshake.js:9:12) at Protocol.handshake (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\mysql\lib\protocol\Protocol.js:37:50) at Connection.connect (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\mysql\lib\Connection.js:37:18) at exports.index (D:\Workspaces\NodeJs_Chapter9\HelloExpress\routes\index.js:15:9) at callbacks (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\express\lib\router\index.js:272:11) at param (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\express\lib\router\index.js:246:11) at pass (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\express\lib\router\index.js:253:5) at Router._dispatch (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\express\lib\router\index.js:280:5) at Object.middleware [as handle] (D:\Workspaces\NodeJs_Chapter9\HelloExpress\node_modules\express\lib\router\index.js:45:10)


왜 그러한가 알아보니, node.js에서는 한번 끊어진 connection은 다시 사용할 수 없는기다~~!!


dbconn.end();


아까 내가 end함수를 호출했으니, 어찌보면 당연한거다..

일단 함 쭉~~ 훌터보면서 connection_pooling에 대해서 확인해봐야긋다..ㅎ


아..졸려..ㅠㅠ