Mysql查询在Node.js调度程序作业中抛出ECONNREFUSED

我正在尝试使用node-schedule和node-mysql模块构build一个带有节点(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.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服务器正在本地运行,我尝试连接并与调度程序用户成功运行相同的查询。

有没有人有这些模块的经验,可能是什么原因的问题?

非常感谢

是的,这是因为asynchronous引擎V8。 当你的电话:

 db.select(connection, 'SELECT * from notifications') 

它不会等到查询完成并返回结果。 这是你的callback处理,而不是你的closures连接数据库和查询命中错误。 您需要closures连接select,如果你想纠正行为:

  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; }); },