본문 바로가기

Node.js

connect-route 모듈 이용하기

connect 2.x 버전이상에서는 route 기능이 삭제되었기 때문에 분노에 찬 개발자가 해당 기능을 구현한 모듈이 있습니다.

링크 : https://npmjs.org/package/connect-route


제가 설치한 버전은 connect-route@0.1.3 버전입니다. 


아래 내용은 모던 웹을위한 node.js 프로그래밍 책의 예제중 챕터 8번 mysql 을 이용한 게시판 구현에서 DB를 mongoDB로 변경 및 connect-route 모듈을 사용하여 변경한 소스입니다.

(디비 모듈 및 내용도 다르기 때문에 htm 파일도 수정하셔야 합니다.)


// 모듈을 추출합니다. 

var fs = require('fs'); 

var connect = require('connect'); 

var ejs = require('ejs'); 

var connectRoute = require('connect-route'); 

var db = require('mongojs').connect('board', ['test']); 

 

var app = connect();

app.use(connect.bodyParser());

 

app.use(connectRoute(function(router){ 

    // GET - /List 

    router.get('/', function (req, res) { 

        // List.htm 파일을 읽습니다. 

        fs.readFile('List.htm', 'utf8', function (error, data) { 

            // 데이터베이스 쿼리를 실행합니다. 

               db.test.find({},{name:1, score:1, _id:0}, function (error, result) { 

                // 응답합니다. 

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

                res.end(ejs.render(data, { 

                    data: result 

                })); 

            }); 

        }); 

    }); 

 

    // GET - /INSERT 

    router.get('/Insert', function (req, res) { 

        // Insert.htm 파일을 읽습니다. 

        fs.readFile('Insert.htm', 'utf8', function (error, data) { 

            // 응답합니다. 

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

            res.end(data); 

        }); 

    }); 

 

 

  // POST - /INSERT 

    router.post('/Insert', function (req, res) { 

    // 변수를 선언합니다. 

    var body = req.body; 

    // 데이터베이스 쿼리를 실행합니다. 

    var temp = {"name":body.name,"score":body.score}; 

   db.test.save(temp, function(error, data){ 

// 응답합니다. 

res.writeHead(302, { 'Location': '/' }); 

res.end(); 

   }); 

    }); 

 

     // GET - /EDIT/:id 

    router.get('/Edit/:id', function (req, res) { 

        // Edit.htm 파일을 읽습니다. 

        fs.readFile('Edit.htm', 'utf8', function (error, data) { 

            // 데이터베이스 쿼리를 실행합니다. 

db.test.find({"name":req.params.id},{name:1, score:1, _id:0}, function (error, result) { 

// 응답합니다. 

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

res.end(ejs.render(data, { 

   data: result 

})); 

}); 

        }); 

    }); 

     

    // POST - /EDIT 

    router.post('/Edit/:id', function (req, res) { 

    // 변수를 선언합니다.

    var body = req.body; 

   db.test.update({"name":body.name},{$set:{"score":body.score},}, function(error, data){ // 응답합니다. 

res.writeHead(302, { 'Location': '/' }); 

res.end();

  }); 

    }); 

 

     // GET - /DELETE/:id 

    router.get('/Delete/:id', function (req, res) { 

        // 데이터베이스 쿼리를 실행합니다. 

   db.test.remove({"name":req.params.id},1, function(error, data){ 

// 응답합니다. 

res.writeHead(302, { 'Location': '/' }); 

res.end(); 

   }); 

    }); 

 

})); 

 

app.listen(8080, function () { 

    console.log('server running at http://127.0.0.1:8080'); 

});


post 에서 파라미터 받는 부분은 connect 모듈에서 bodyParser() 함수를 사용합니다. 

소스 11번째에서 app.use(connect.bodyParser()); 에서 해당 함수 사용을 연결하며 

post 함수내에서는 43번째와 같이 

var body = req.body; 

body.(사용 칼럼 id)를 통하여 submit 된 값을 가져 올수 있습니다. 



var
    connectRoute = require('connect-route');
    connect = require('connect'),
    app = connect();

app.use(connectRoute(function (router) {
    router.get('/', function (req, res, next) {
        res.end('index');
    });

    router.get('/home', function (req, res, next) {
        res.end('home');
    });

    router.get('/home/:id', function (req, res, next) {
        res.end('home ' + req.params.id);
    });

    router.post('/home', function (req, res, next) {
        res.end('POST to home');
    });
}));

위의 내용은 https://github.com/baryshev/connect-route 에 기재된 예제입니다. 기존의 route 와 비슷하다는것을 볼수 있습니다.

connect 모듈을 사용하셨다면 어려움 없이 connect-route를 붙여서 사용 가능하실 겁니다.