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를 붙여서 사용 가능하실 겁니다.
'Node.js' 카테고리의 다른 글
node.js c9.io Error: listen EADDRINUSE 에러 발생시 (0) | 2014.02.15 |
---|---|
connect 모듈 router 기능 구현 (0) | 2013.04.07 |
node.js mongojs 를 이용한 웹페이지 출력 (2) | 2013.04.04 |
connect 모듈 router 에러 발생시 (2) | 2013.04.03 |
node.js mongojs 를 이용한 mongodb 예제 (0) | 2013.04.02 |