我制作了一个Node.js脚本,该脚本检查MySQL数据库中的新条目,并使用socket.io将数据发送到客户端的Web浏览器。该脚本旨在大约每2秒检查一次新条目。我正在使用Forever来保持脚本运行,因为该脚本托管在VPS上。
我相信发生的事情是for循环无限循环(更多有关为什么我认为这是下面的问题)。 Forever生成的日志文件中没有错误消息,并且脚本“正在运行”,即使它开始挂机也是如此。具体来说,脚本挂起的部分是该脚本停止在端口8888上接受浏览器请求,并且不提供客户端socket.io js文件。我已经进行了一些故障排除,并确定了可能导致此问题的一些关键组件,但最终,我不确定为什么会发生这种情况,而且似乎找不到解决方法。
这是代码的相关部分:
http.listen(8888,function(){
console.log("Listening on 8888");
});
function checkEntry() {
pool.getConnection(function(err,connection) {
connection.query("SELECT * FROM `data_alert` WHERE processtime > " + (Math.floor(new Date() / 1000) - 172800) + " AND pushed IS NULL", function (err, rows) {
connection.release();
if (!err) {
if(Object.keys(rows).length > 0) {
var x;
for(x = 0; x < Object.keys(rows).length; x++) {
connection.query("UPDATE `data_alert` SET pushed = 1 WHERE id = " + rows[x]['id'],function() {
connection.release();
io.emit('refresh feed', 'refresh');
});
}
}
}
});
});
setTimeout(function() { checkEntry();var d = new Date();console.log(d.getTime()); },1000);
}
checkEntry();
我在排除故障时发现了一些有趣的东西...
目前,任何想法都将大有帮助。我是最近才开始使用Node.js的,所以可能有一个显而易见的明显原因,我在这里不见了。
谢谢。
答案 0 :(得分:0)
所以我只想回到这个问题,然后解决问题所在。我花了很长时间才弄清楚,这只能由我自己的经验来解释。我的脚本的一部分中,我的代码包含以下内容:
app.get("/", (request, response) => {
// Some code to log things to the console here.
});
问题是我没有发送回复。新代码如下所示,并解决了我的挂断问题:
app.get("/", (request, response) => {
// Some code to log things to the console here.
response.send("OK");
});
该问题与我在最初的问题中介绍的部分代码无关。