2015년 5월 18일 월요일

'app.router' is deprecated!

- 발생현상
  서비스 실행시 발생 오류

baesunghan:~/Documents/workspace/nodejs/exam_mysql$node app.js
/Users/baesunghan/Documents/workspace/nodejs/node_modules/express/lib/application.js:120
      throw new Error('\'app.router\' is deprecated!\nPlease see the 3.x to 4.
            ^
Error: 'app.router' is deprecated!
Please see the 3.x to 4.x migration guide for details on how to update your app.
    at EventEmitter.Object.defineProperty.get (/Users/baesunghan/Documents/workspace/nodejs/node_modules/express/lib/application.js:120:13)
    at Object.<anonymous> (/Users/baesunghan/Documents/workspace/nodejs/exam_mysql/app.js:17:12)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3
baesunghan:~/Documents/workspace/nodejs/exam_mysql$


- 발생원인
설치된 Express 모듈은 4.12.3 인데 router에 대한 코딩을 3.x방식으로 작성해서 발생한 문제

  . 모듈 버젼 확인

baesunghan:~/Documents/workspace/nodejs/exam_mysql$npm list
/Users/baesunghan/Documents/workspace/nodejs
├── ejs@2.3.1
├─┬ express@4.12.3
│ ├─┬ accepts@1.2.7
│ │ ├─┬ mime-types@2.0.11
│ │ │ └── mime-db@1.9.1
│ │ └── negotiator@0.5.3
│ ├── content-disposition@0.5.0
│ ├── content-type@1.0.1
│ ├── cookie@0.1.2
│ ├── cookie-signature@1.0.6
│ ├─┬ debug@2.1.3


  . 3.x 방식 router 코딩

// 서버 생성
var app = express();
app.use(app.router);


// 서버 실행
http.createServer(app).listen(18585, function() {
    console.log('server running at http://localhost:18585');
});

// router를 수행해서 페이지 분기
// 리스트 조회
app.get('/', function(request, response) {
    // list.html을 읽음
    fs.readFile('list.html', 'utf-8', function(error, data){
        // mysql 에서 데이터 query
        client.query('SELECT * FROM products', function (error, results) {
            // 결과 리턴
            response.send(ejs.render(data, {
                data : results
            }));
        });
    });
});


- 해결방법
설치된 Express의 버젼(4.x)에 맞게 router 코딩을 한다.


// router를 수행해서 페이지 분기
// 리스트 조회
app.route('/')
.get(function(req, res, next) {
// list.html을 읽음
fs.readFile('list.html', 'utf-8', function(error, data){
// mysql 에서 데이터 query
client.query('SELECT * FROM products', function (error, results) {
// 결과 리턴
res.send(ejs.render(data, {
data : results
}));
});
});
})
.post(function(req, res, next) {
getList(req,res,next);
});

function getList(req, res, next) {
// list.html을 읽음
fs.readFile('list.html', 'utf-8', function(error, data){
// mysql 에서 데이터 query
client.query('SELECT * FROM products', function (error, results) {
// 결과 리턴
res.send(ejs.render(data, {
data : results
}));
});
});
};
;


이 글은 Evernote에서 작성되었습니다. Evernote는 하나의 업무 공간입니다. Evernote를 다운로드하세요.

댓글 없음:

댓글 쓰기