2

nodeJsサーバーとmysqlデータベースとチャットしようとしています。

ここでモジュール(Mysqlerという名前)を作成することにしました:

var mysql = require('mysql');

var Mysqler = function(query) {
    var connection = mysql.createConnection({
            host     : 'localhost',
            user     : 'root',
            password : '',
            database : 'watchat',
        });

    connection.connect();
    Mysqler.prototype.query = function (query) {
        var res = mysql.query(query, function(err, result, fields) {
                console.log(result);
                if (err) throw err;
                else return result;
            });

        console.log(res);
        return res;
    };

};

module.exports.Mysqler = Mysqler

しかし、これを関数で呼び出すと、次のようになります。

mysql = require("./mysqler");

function connection(clients, socket, data) {
    var username = usefull.deleteBreakLine(data[1]);
    var password = usefull.deleteBreakLine(data[2]);

    var result = mysql.Mysqler("SELECT * FROM Users");
    for (var i in result)
        {
            var user = result[i];
            socket.write(user.username);
        }
}

しかし、結果変数には何も返されません。console.log()をモジュールに入れると、何も出力されません。

4

2 に答える 2

1
  1. Mysqlqueryメソッドは非同期です。コールバックから結果を返そうとしています。これは絶対に間違った方法です。コールバック関数に引数として渡して結果を返す必要があります。
  2. queryの代わりにmysqlオブジェクトのメソッドを呼び出そうとしていますconnection
于 2012-10-12T20:14:18.893 に答える
1

多分あなたはそのようなことを試すことができます:

var mysql = require('mysql');

var Mysqler = (function() {
    var connection = mysql.createConnection({
            host     : 'localhost',
            user     : 'root',
            password : '',
            database : 'watchat',
        });

    connection.connect();

    return {
        query: function (query,cb) {
            var res = mysql.query(query, function(err, result, fields) {
                console.log(result);
                if (err) throw err;
                else cb(result);
            });
        };
    }

})();

module.exports = Mysqler;

と:

var mysql = require("./mysqler");

function connection(clients, socket, data) {
    var username = usefull.deleteBreakLine(data[1]);
    var password = usefull.deleteBreakLine(data[2]);

    mysql.query("SELECT * FROM Users",function(result){
        for (var i in result)
        {
            var user = result[i];
            socket.write(user.username);
        }
    });

}
于 2012-10-12T20:25:27.690 に答える