2017-07-18 92 views
0

我得到以下在生產環境中的錯誤,我已經在分期和開發環境測試此代碼,但其造成的唯一生產環境d.collection在生產環境nongoclient異步瀑布不是一個函數的NodeJS

#node /home/abc/xyz/current/packages/omi-worker/bulk_load_devices.js 


Error: 

There is error while connecting to mongo client 
/home/abc/xyz/releases/20170630032343/packages/omi-worker/node_modules/mongodb/lib/mongo_client.js:456 
      throw err 
      ^

TypeError: db.collection is not a function 
    at /abc/xyz/viewpoint/releases/20170630032343/packages/omi-worker/src/device.js:71:14 
    at nextTask (/home/abc/xyz/releases/20170630032343/packages/omi worker/node_modules/async/dist/async.js:5297:14) 
    at next (/home/abc/xyz/releases/20170630032343/packages/omi-worker/node_modules/async/dist/async.js:5304:9) 
    at /home/abc/xyz/releases/20170630032343/packages/omi-worker/node_modules/async/dist/async.js:906:16 
    at /abc/xyz/viewpoint/releases/20170630032343/packages/omi-worker/src/device.js:63:15 
    at connectCallback (/home/abc/xyz/releases/20170630032343/packages/omi-worker/node_modules/mongodb/lib/mongo_client.js:505:5) 
    at /home/abc/xyz/releases/20170630032343/packages/omi-worker/node_modules/mongodb/lib/mongo_client.js:453:13 
    at _combinedTickCallback (internal/process/next_tick.js:73:7) 
    at process._tickCallback (internal/process/next_tick.js:104:9) 
一個錯誤

以下是節點腳本的片斷,其處理在臨時哈希一些數據並創建MongoDB的連接和數據插入到數據庫

 #!/usr/bin/env node 

var MongoClient = require('mongodb').MongoClient; 
var service = require('./service'); 
var service_1 = require('./service_1'); 
var service_2 = require('./service_2'); 
var database = require('./../utility/database'); 
var fs = require('fs'); 
var moment = require('moment'); 
var GLOBAL = require("./../config/global"); 
var _ = require('lodash'); 
var async = require('async'); 
var log4js = require('log4js'); 
var path = require('path'); 
var logFilepath = path.join(__dirname, './../config/log4js.json'); 
var logConfig = fs.readFileSync(logFilepath); 
log4js.configure(logConfig); 
var logger = log4js.getLogger('bulk_load_devices'); 
var mongo_server = GLOBAL.MONGO_SERVER.url; 

module.exports = { 
    bulkLoad: function() { 
    async.waterfall(
     [ 
// Update devices details from service_1 
     function(callback) { 
      var big_bacon = service_1.bulkLoad(data); 
      callback(null, big_bacon); 
     }, 
     function(big_bacon, callback) { 
      var commands = service_1.update_command_table(big_bacon); 
      callback(null, big_bacon, commands); 
     }, 
     // Update devices details from service_2 
     function(big_bacon, commands, callback) { 
      big_bacon = service_2.bulkLoad(big_bacon); 
      callback(null, big_bacon, commands); 
     }, 
     // Connect to mongoclient for database operations. 
     function(big_bacon, commands, callback) { 
      MongoClient.connect(mongo_server, function(err, db) { 
      if (err) { 
       logger.debug('There is error while connecting to mongo client'); 
       console.log('There is error while connecting to mongo client'); 
       callback(null); 
      } else { 
       callback(null, db, big_bacon, commands); 
      } 
      }); 
     }, 
     // Bulk insert process commands data into temporary command worker. 
     function(db, big_bacon, commands, callback) { 
      console.log("collection======" + db.collection); 
      db.collection(GLOBAL.COMMAND_WORKER).insertMany(commands, function(err, r) { 
      callback(null, db, big_bacon); 
      }) 
     } 
     ]  ], 
     function(err, result) {} 
    ); 
    }, 

    prepareData: function() { 
    var processData = []; 
    var deviceData = service.getDeviceList(); 
    async.each(deviceData, function(device, callback) { 
     var currentTime = moment(moment()).format('YYYY-MM-DD HH:mm Z'); 
     record = { 
     guid: device['properties']['guid'], 
     }; 
     processData.push(record); 
    });  
    return processData; 
    } 
} 

回答

0

你的代碼不正確。

async.waterfall([ 
    ... 
    // Connect to mongoclient for database operations. 
    function(big_bacon, commands, callback) { 
     MongoClient.connect(mongo_server, function(err, db) { 
     if (err) { 
      logger.debug('There is error while connecting to mongo client'); 
      console.log('There is error while connecting to mongo client'); 
      callback(null); // <<<<<<< 
     } else { 
      callback(null, db, big_bacon, commands); 
     } 
     }); 
    }, 

    // Bulk insert process commands data into temporary command worker. 
    function(db, big_bacon, commands, callback) { 
     console.log("collection======" + db.collection); 
     db.collection(GLOBAL.COMMAND_WORKER).insertMany(commands, function(err, r) { 
     callback(null, db, big_bacon); 
     }) 
    } 
], 

如果您無法連接到蒙戈然後db -object是不確定的和下面的步驟並不重要。您必須致電callback(err)而不是callback(null)以打破async.waterfall並跳轉至最終回叫。

], // end of waterfall array function 

    function(err, result) { 
     if (err) { 
      // process error here 
     } 
    } 
); // end of async.waterfall 
+0

嘿@Aikon MOGWAI感謝這個修正,但我的問題是我收到錯誤db.collection是不是在生產環境中的功能,可以幫助我在這裏 –

+0

'db.collection'是不是一個功能,因爲' db'等於'undefined'。當然,undefined'沒有方法'collection'和其他的。您在生產上連接到MongoDB時遇到問題。你必須檢查db連接參數,並且如上所述更改代碼。 –

+0

謝謝我調試更多我得到錯誤 錯誤跟蹤== MongoError:無法連接到第一次連接到服務器[MongoError:連接超時] –