Mysql查询在Node.js调度程序作业中抛出ECONNREFUSED
我正在尝试使用节点调度和节点mysql模块构建一个具有节点(v0.10.33)的调度器。代码如下:Mysql查询在Node.js调度程序作业中抛出ECONNREFUSED,mysql,node.js,Mysql,Node.js,我正在尝试使用节点调度和节点mysql模块构建一个具有节点(v0.10.33)的调度器。代码如下: var schedule = require('node-schedule'); var mysql = require('mysql'); var rule = new schedule.RecurrenceRule(); rule.second = 59; schedule.scheduleJob(rule, function(){ var connection = db.conne
var schedule = require('node-schedule');
var mysql = require('mysql');
var rule = new schedule.RecurrenceRule();
rule.second = 59;
schedule.scheduleJob(rule, function(){
var connection = db.connect();
console.log('Successfully established database connection.');
var resultSet = db.select(connection, 'SELECT * from notifications');
db.disconnect(connection);
});
var db = {
connect: function(){
var connection = mysql.createConnection({
host : 'localhost',
user : 'scheduler',
password : 'scheduler'
});
console.log('Trying to establish connection with database...');
connection.connect();
return connection;
},
select: function(connection, queryString){
console.log('Executing database query...');
connection.query(queryString, function(err, rows, fields) {
if (err) throw err;
console.log('The solution is: ', rows[0].messagetext);
return rows;
});
},
disconnect: function(connection){
connection.end();
}
}
当我执行调度程序时,我得到以下输出:
Trying to establish connection with database...
Successfully established database connection.
Executing database query...
/home/user/notificationscheduler/scheduler.js:32
if (err) throw err;
^
Error: connect ECONNREFUSED
at errnoException (net.js:904:11)
at Object.afterConnect [as oncomplete] (net.js:895:19)
--------------------
at Protocol._enqueue (/home/user/notificationscheduler/node_modules/mysql/lib/protocol/Protocol.js:135:48)
at Protocol.handshake (/home/user/notificationscheduler/node_modules/mysql/lib/protocol/Protocol.js:52:41)
at Connection.connect (/home/user/notificationscheduler/node_modules/mysql/lib/Connection.js:119:18)
at Object.db.connect (/home/user/notificationscheduler/scheduler.js:25:14)
at Job.db.connect.mysql.createConnection.host [as job] (/home/user/notificationscheduler/scheduler.js:9:25)
at Job.invoke (/home/user/notificationscheduler/node_modules/node-schedule/lib/schedule.js:117:10)
at null._onTimeout (/home/user/notificationscheduler/node_modules/node-schedule/lib/schedule.js:369:11)
at Timer.listOnTimeout [as ontimeout] (timers.js:112:15)
mysql服务器正在本地运行,我尝试与调度器用户成功连接并运行同一查询
是否有人曾使用过这些模块?问题的原因是什么
非常感谢是的,这是因为异步发动机v8。当您拨打电话时:
db.select(connection, 'SELECT * from notifications')
它不会等到查询完成并返回结果。这是由您的回调处理的,但是您正在关闭与db的连接,并且查询遇到错误。如果要更正行为,需要在“选择”中关闭连接:
select: function(connection, queryString){
console.log('Executing database query...');
connection.query(queryString, function(err, rows, fields) {
if (err) throw err;
console.log('The solution is: ', rows[0].messagetext);
connection.end(); // Here close the connection
return rows;
});
},
说得好,谢谢。但我认为这只是问题的一部分。我得到的错误似乎是由TCP连接引起的,它没有在我的MySQL服务器上配置。我得到了验证,但感谢您的输入。我必须在mysql服务器上运行'mysql configure--socket',并在'socketPath'连接参数中包含生成的.sock文件的路径。