2013-04-28 4 views
4

Nodej 및 node-mysql 모듈을 찾고 있습니다. 나는 작은 문제가있다. 내가 찾은 모든 자습서는 데이터베이스에서 select를 수행하는 방법을 설명하지만 결코 행을 반환하지 않으며 항상 로그합니다. 따라서 내 경우에는 전혀 쓸모가 없습니다. 어떻게 함수가 app.js에서 사용하기 위해 행을 반환 할 수 있습니다nodejs 및 node-mysql을 사용하여 행 반환

exports.findAllContinents = function(connection) { 
    var connection = getConnection(); 
    connection.query('select id, code, name from Continent', function (err, rows, fields) { 
     if (err) { 
      console.log("Error in findAllContinents : " + err) 
     } 
     return JSON.stringify(rows); 
    }); 
    closeConnection(connection); 
}; 

:

// Get continents 
app.get("/continents", function(request, result) { 
    console.log("Continents : " + database.findAllContinents()); 
}); 

그리고 mysql.js 파일 :

은 내가 app.js 파일이 파일? app.js 파일에 연결을 만들고 싶지는 않지만 DAO 레이어를 구분해야합니다. 의견이 있으십니까? 누군가가 노드의 MySQL 대신 ORM의 사용의 장점/단점 아이디어 (sequelize, persistence.js ...)

덕분 경우

또한

답변

14

query() 비동기 함수로부터는 어떤 결과도 반환 할 수 없습니다. 따라서 비동기 함수 자체를 호출하는 함수 (예 : findAllContinents)도 마찬가지입니다.

는 대신, 콜백 함수를 전달해야 쿼리가 완료 될 때 호출 될 것이다 (또한 here 설명) :

// app.js 
app.get("/continents", function(request, response) { 
    database.findAllContinents(function(err, results) { 
    if (err) 
     throw err; // or return an error message, or something 
    else 
     res.send(results); // as a demo, we'll send back the results to the client; 
         // if you pass an object to 'res.send()', it will send 
         // a JSON-response. 
    }); 
}); 

// mysql.js 
exports.findAllContinents = function(cb) { 
    var connection = getConnection(); 
    connection.query('select id, code, name from Continent', function (err, rows, fields) { 
    // close connection first 
    closeConnection(connection); 
    // done: call callback with results 
    cb(err, rows); 
    }); 
}; 

(안) 정말에 따라 달라, ORM을 사용으로 유스 케이스. ORM (My favourite for MySQL은 patio)을 선택할 것입니다. 왜냐하면 내 응용 프로그램에 여러 개의 (복잡한) 모델이 필요하고, 둘 사이의 연관이있을 수 있기 때문입니다. 또한 ORM이 제공하는 추상화 기능을 사용하면 코드를 더 쉽게 읽을 수 있으며 대개 앱을 다른 데이터베이스로 쉽게 포팅 할 수 있습니다.

+1

그 일을 고마워. :). 비동기 함수의 개념을 더 잘 이해합니다. ORM에 관해서는 PHP와 Java에서 왔습니다. 자연스럽게 ORM을 사용했지만, Node.js에서는 "특별"한 것 같습니다. 난 Sequelize를 시도하고 누락 된 기능이 많이 있습니다 (예 : 외래 키 제약) – c4k