【发布时间】:2013-12-21 17:55:59
【问题描述】:
我有几个模块从数据库中提取数据并将它们存储在本地内存中。然后,我具有从对象中提取数据的功能,因为不同的页面需要它们。它工作得很好,除了在我的登台服务器上每天一两次,对象是空的,我必须重新启动服务器才能再次填写数据。
我已经消除了这里的一些复杂性,但这就是想法,几个小时后,道路是空的,getRoad 总是返回 null;
var db = require('./db.js');
var roads = [];
db.query('select * from road', function(err, rows) {
if (err) { console.log(err); }
roads = rows;
});
module.exports.getRoad = function(id) {
if (roads[id]) {
return roads[id];
}
return null;
};
更新:
我正在添加 db.js,以便您可以查看其中的内容。我还为每个日志记录了很多日志,所以下次失败时我会提供更多详细信息。
var Pool = require('mysql-simple-pool');
var mysql_pool = new Pool(50, {
host: process.env.IP || '127.0.0.1',
user: 'username',
password: 'password',
database: 'database'
});
module.exports = mysql_pool;
更新:
好吧,我可能会提出一个单独的问题,但似乎唯一破坏的是对数据库的调用。所以垃圾收集绝对不是问题。 mysql-simple-pool 或类似的东西似乎有些错误。如果有人知道 mysql-simple-pool 会在 12 小时左右后停止响应的任何原因,我将不胜感激:)。
【问题讨论】:
-
“复杂性”中的某些东西可能是问题所在——我没有看到任何会导致您描述的问题的东西(除非数据库驱动程序在几个小时后再次调用回调)。
-
有趣,我会在 db 回调中添加一个 console.log 以确保。这个模块并不复杂,但其他一些模块更复杂。
-
您是否真的检查了
roads以确定它是否为空,或者您是否从您观察到的行为中推断出它?我能想到你会得到所有null结果的其他原因。例如,如果调用getRoad的代码在某个时候出现问题并开始使用无效的id值调用它。
标签: node.js garbage-collection