鍍金池/ 問答/Python  數據庫  HTML/ node.js與mongodb交互時出現TypeError: Cannot re

node.js與mongodb交互時出現TypeError: Cannot read property 'db' of null

我使用了一個huya-danmu的第三方包來實現對虎牙直播平臺直播間彈幕禮物的監(jiān)聽
地址:https://github.com/BacooTang/...
并將彈幕禮物信息存入mongodb中,邏輯是先通過查詢mysql獲得所有以存的虎牙直播間地址,在回調函數中對查詢結果進行遍歷,逐一執(zhí)行彈幕禮物監(jiān)聽代碼,并將結果存儲到mongo中
但是在程序運行中總會出現TypeError: Cannot read property 'db' of null的錯誤,這個錯誤有時會直接中斷程序拋出異常,有時不會終端程序而顯示在我規(guī)定輸入的日志當中。

中斷程序的報錯信息:

clipboard.png

日志當中的錯誤信息:
[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大回調里,另外一種是使用連接池

2018年7月10日 03:05