본문 바로가기

Node.js

connect 모듈 router 에러 발생시

connect 모듈이 2.0 버전 으로 올라가면서 router 함수가 빠졌습니다.

express 모듈을 사용하면 되지만 connect 함수를 계속 사용하시는 분들은 아래와 같이 소스를 변경하여 사용하면

전체소스를 크게 변동하지 않고 사용가능합니다.



예전소스(connect 1.8.5 이하 버전에서 router 사용예제)

var connect = require('connect');

var fs = require('fs');


connect.createServer(connect.router(function (app) {

      app.get('/', function (req, res, next){

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

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

                res.end(data);

        });

      });

})).listen(8080, function () {

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

});



변경소스(connect 2.0 이상 버전에서 router 를 뺀 소스 )

var connect = require('connect');
var fs = require('fs');

function get(path, cb){
    return function(req, res ,next){
     if(req.method != 'GET' || req.url != path) return next();
        cb(req, res, next);
    }
}

var app = connect()

.use(get('/', function (req, res, next){
        fs.readFile('test.htm', 'utf8', function(error, data){
                res.writeHead(200, {'Content-Type':'text/html'});
                res.end(data);
        });
})).listen(8080, function () {

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

});



두개의 소스모두 test.htm 파일이 있다는 가정하에 작성하였습니다.

변경소스를 보시면 get 함수를 추가된것을 알수 있습니다.

get함수를 use 함수를 통하여 연결함으로써 기존소스를 거의 변경시키지 않은 상태에서도 소스를 유지할수 있습니다. 




출처 : http://stackoverflow.com/questions/9571239/mac-os-x-nodejs-has-no-method-router-error