我使用了一个huya-danmu的第三方包来实现对虎牙直播平台直播间弹幕礼物的监听
地址:https://github.com/BacooTang/...
并将弹幕礼物信息存入mongodb中,逻辑是先通过查询mysql获得所有以存的虎牙直播间地址,在回调函数中对查询结果进行遍历,逐一执行弹幕礼物监听代码,并将结果存储到mongo中
但是在程序运行中总会出现TypeError: Cannot read property 'db' of null
的错误,这个错误有时会直接中断程序抛出异常,有时不会终端程序而显示在我规定输入的日志当中。
中断程序的报错信息:
日志当中的错误信息:[2018-06-13T16:31:34.777] [DEBUG] default - MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect EADDRINUSE 127.0.0.1:27017]
以下是与mongo交互部分的代码:
client.on('message', msg => {
switch (msg.type) {
case 'chat':
// 存入mongodb数据库
mongoclient.connect(danmu_con.mongo_url, function (err, db) {
if(err) {
logger.debug(`${err}`);
};
var dbo = db.db('danmu');
var data = {anchor_id: `${id}`, live_url: `${element}`, platform_id: 7, add_time: parseInt(`${time}`), type: 'danmu', content: `${msg.content}`};
dbo.collection('huya').insertOne(data, function (err, result) {
if (err) {
logger.debug(`${err}`);
};
// console.log('弹幕数据插入成功');
db.close();
});
});
// console.log(`[${msg.from.name}]:${msg.content}`);
break;
case 'gift':
// 存入mongodb数据库
mongoclient.connect(danmu_con.mongo_url, function (err, db) {
if(err) {
logger.debug(`${err}`);
};
var dbo = db.db('danmu');
var data = {anchor_id: `${id}`, live_url: `${element}`, platform_id: 7, add_time: parseInt(`${time}`), type: 'gift', content: `${msg.name}`, gift_num: `${msg.count}`};
dbo.collection('huya').insertOne(data, function (err, result) {
if(err) {
logger.debug(`${err}`);
};
// console.log('礼物数据插入成功');
db.close();
});
});
// console.log(`[${msg.from.name}]->赠送${msg.count}个${msg.name}`);
// 将礼物信息存入xj_gift_value表中
dbhelper.Query(format(select_sql, msg.name, huya_id), function (err, rows) {
if (err) {
logger.debug(err);
};
if (rows.length == 0) {
dbhelper.Query(format(insert_sql, msg.id, msg.name, huya_id, parseFloat(msg.earn/msg.count), time, time), function (err, rows) {
if (err) {
logger.debug(err);
}else{
logger.debug('insert successfully!');
};
});
};
});
break;
case 'online':
// console.log(`[当前人气]:${msg.count}`);
break;
};
});
希望各位大佬能够解答我的疑惑,十分感谢!
错误信息中显示 127.0.0.1:27017已经被占用了,之所以会出现这种现象,我猜是不是因为重复conncet mongodb导致的,建议:一种是把所有逻辑都放到connect大回调里,另外一种是使用连接池