2015-05-24 6 views
13

मैं नोडजेज़ का उपयोग कर ट्विटर के साथ इंटरफेसिंग कर रहा हूं। मैं एक मोंगोलैब mongodb डेटाबेस में कुछ महत्वपूर्ण सार्वजनिक उपयोगकर्ता डेटा लॉग करने की कोशिश कर रहा हूँ। किसी कारण से मैं "टोपोलॉजी को नष्ट कर दिया गया त्रुटि" प्राप्त कर रहा हूं, मुझे पूरा यकीन नहीं है कि यह क्यों है।मंगोलब नोडजेस टोपोलॉजी नष्ट हो गया

var Twitter = require('twitter'); 
var mongodb = require('mongodb'); 

var accounts = ['@zaynmalik', 
'@ZooeyDeschanel']; 

var client = new Twitter({ 
    consumer_key: 'key', 
    consumer_secret: 'secret', 
    access_token_key: 'key', 
    access_token_secret: 'secret' 
}); 

var MongoClient = mongodb.MongoClient; 
var url = "mongodb://user:[email protected]:numbers/db"; 

MongoClient.connect(url, function (err, db) { 
    if (err) { 
    console.log('Unable to connect to the mongoDB server. Error:', err); 
    } else { 
    //HURRAY!! We are connected. :) 
    console.log('Connection established to database'); 

    var collection = db.collection('accounts'); 

    for(var i = 0; i < accounts.length; i++){ 
     client.get('users/show', {screen_name: accounts[i]}, function(error, tweets, response){ 
      if(error) console.log(error); 
       var account = {'screen_name': accounts[i], 'id': tweets.id}; 
       collection.insert(account, {w:1}, function(err, result) {console.log(err);}); 
       //collection.insert(account); 
       console.log(tweets.id); // Raw response object. 
     }); 

} 

    db.close(); 
    } 
}); 

आप इस कार्यक्रम देख सकते हैं डेटाबेस से संबंध स्थापित करता है। संग्रह को परिभाषित करता है और फिर कई ट्विटर खातों के माध्यम से पुनरावृत्त करता है और उचित जानकारी लॉग करता है। ट्विटर अनुरोध सफल हैं और मोंगोडब सरल अनुरोधों के साथ काम करता है। यदि आपके पास कोई प्रतिक्रिया है कि मुझे यह प्रतिक्रिया क्यों मिल रही है तो कृपया उत्तर दें।

उत्तर

9

मुझे इसी तरह की समस्या थी, ट्विटर पर आपके सभी अनुरोधों से पहले आपका डेटाबेस कनेक्शन बंद हो जाता है और डेटा डाला जाता है।

मैंने अपने फ़ंक्शन में कॉलबैक भेजना समाप्त कर दिया जैसे वे दस्तावेज़ में करते हैं।

https://github.com/mongodb/node-mongodb-native#inserting-a-document

आप देख सकते हैं के बाद प्रविष्टि किया जाता है वे callback(result);

फोन और यह बस एक गुमनाम फ़ंक्शन को कॉल db.close()

यहाँ कुछ अन्य लिंक है कि आप खोलने/बंद करने के साथ बाहर मदद कर सकता है कर रहे हैं डाटाबेस कनेक्शन

When to close MongoDB database connection in Nodejs

Why is it recommended not to close a MongoDB connection anywhere in Node.js code?

Keeping open a MongoDB database connection

आशा है कि यह मदद करता है!

+0

आपकी पहली वाक्य त्रुटि को ठीक करने के लिए मेरे कोड के माध्यम से शिकार करने के लिए आवश्यक संकेत था। मैं सचमुच मोंगोस कनेक्शन को बंद कर रहा था _before_ एक कॉलबैक जिसने थोक प्रविष्टि को अपना कार्य पूरा करने का मौका दिया था। धन्यवाद! – Saheed

9

एक ही समस्या का सामना करना है, मैंने पाया है कि आदेश उत्पादन में जिंदा MongoDB के कनेक्शन रखने के लिए Mongolab recommends to apply the following settings:

var options = { 
    server: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } }, 
    replset: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } } 
}; 
mongoose.connect(secrets.db, options); 

मुझे आशा है कि यह तुम्हारी मदद करेगा, या अन्य लोगों को इस होने "टोपोलॉजी नष्ट हो गया था" समस्या ।

1

मुझे एक ही समस्या थी। तब मुझे अपने मोंगोज़ लाइब्रेरी को अपग्रेड करने का विचार था। लेकिन जैसा कि मैं npm इंस्टॉल कर रहा था, mongoose त्रुटि दिखाई दी "... kerberos त्रुटियां (gssapi/gssapi.h फ़ाइल नहीं मिली) ..."। तो कुछ शोध के बाद मैंने देखा कि एपीटी चलाने के लिए पर्याप्त हल करने के लिए- libkrb5 -dev स्थापित करें या हैड हैम स्थापित krb5 -devel स्थापित करें। मैंने एनपीएम करने के बाद मोंगोज़ स्थापित किया और मेरी समस्या हल की

+0

क्या आप अपना उत्तर साफ कर सकते हैं और कुछ चरणों को स्पष्ट कर सकते हैं? यह सही हो सकता है, मैं बस इसे समझ में नहीं आता। – blm

+0

मैंने अभी इस सलाह का पालन किया और यह मेरे लिए काम किया। 'sudo aptitude libkrb5-dev' &&' rm -rf node_modules' && 'npm इंस्टॉल करें ' और यह है। धन्यवाद @ गिलमार –

संबंधित मुद्दे