我正在尝试与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()时,没有打印出来。
答案 0 :(得分:1)
query
方法是异步的。您试图从回调中返回结果。这绝对是错误的方式。您需要通过将其作为参数传递给回调函数来返回结果。query
对象的方法mysql
而不是connection
。答案 1 :(得分: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);
}
});
}