0

非同期プログラミングの作業を開始し、nodejs アプリケーションを作成し、いくつかのファイルにコードをスライスしました: index.js、ctlUser.js、DAO.js など... .. Index.js は必要なメイン ファイルです。 ctlUser と ctlUser には DAO.js が必要です... DAO はデータベースに接続し、クエリを実行します...

抽象化すると、私の構造は次のようになります...

Index.js

var ctlUser =  require('./ctlUser.js');
var username = ctlUser.getUserName('1');
console.log("Return from ctlUser" + username);

ctlUser.js

var DAO = require('./DAO.js');
var getUserName = function(id){
    var userName = DAO.executeQuery("SELECT username FROM tbUsers WHERE id = " + id );
    console.log(Return from DAO = userName);
    return username;
}

ここのDAO.jsはすべて問題ありません...

var mysql      = require('mysql'); 
var executeQuery = function(query) {    
        var connection = mysql.createConnection({
            host        : SERVER,
            user        : USER,
            password    : PASSWORD,
            database    : DATABASE
        });
        connection.connect();
        connection.query(query, function(err, rows, fields) {
            if (err) throw err;
            connection.end();
            console.log("Here in DAO: " + rows[0].username);
            return rows[0].username;
        });
    };

の出力$ node index.jsは次のとおりです。

Return of ctlUser: undefined
Return of DAO: undefined
Here in DAO: Filipe Tagliacozzi

すべてのモジュールのエクスポートを抽象化すると、固定変数では問題なく動作しますが、データベースの応答ではうまくいきません..この構造にコールバックを実装して、userName を index.js に渡すにはどうすればよいですか?

4

2 に答える 2

8

DAO.js モジュールの executeQuery 関数を変更して、コールバックを使用します。

var executeQuery = function(query,callback) {    
        var connection = mysql.createConnection({
            host        : SERVER,
            user        : USER,
            password    : PASSWORD,
            database    : DATABASE
        });
        connection.connect();
        connection.query(query, function(err, rows, fields) {
            if (err) throw err;
            connection.end();
            console.log("Here in DAO: " + rows[0].username);
            callback(rows[0].username);
        });
    };

ctlUser.js の getUserName 関数を介してコールバックをチェーンします。

    var getUserName = function(id,callback){
        DAO.executeQuery("SELECT username FROM tbUsers WHERE id = " + id ,function(username){
           console.log("Return from DAO =" ,userName);
           callback(username);
        });       
    }

次に、次のように index.js で使用します。

var ctlUser =  require('./ctlUser.js');
ctlUser.getUserName('1',function(username){
    console.log("Return from ctlUser" + username);
});
于 2013-05-14T14:28:38.480 に答える