2015-11-02 5 views
5

मेरे पास pokemons नामक संग्रह के साथ pokemon नामक एक मोंगोड डेटाबेस है।Node.js में MongoDB से JSON वापस कैसे करें?

var express = require('express'); 
var router = express.Router(); 

router.get('/pokedex', function (req, res) { 
    res.jsonp(db.getPokemonByName('Dratini')); 
}) 

This link MongoDB डेटा प्रवेश करने के लिए कैसे दिखा में उपयोगी है:

'use strict'; 

var MongoClient = require('mongodb').MongoClient; 
var assert = require('assert'); 

// db url 
var url = 'mongodb://localhost:27017/pokemon'; 

exports.getPokemonByName = function (name) { 

    MongoClient.connect(url, function(err, db) { 
    assert.equal(null, err); 
    var cursor = db.collection('pokemons').find({name: name}); 

    // how to return json? 
    }); 

}; 

मैं फिर एक और फ़ाइल में इस फ़ंक्शन को कॉल करें: यहाँ एक समारोह है कि MongoDB में एक find() आपरेशन करना होगा लिखने के लिए मेरे प्रयास है कंसोल ऑब्जेक्ट पर each() विधि के कुछ प्रकार के द्वारा कंसोल पर, लेकिन मुझे नहीं पता कि return जेसन getPokemonByName फ़ंक्शन के माध्यम से कैसे करें। मैंने getPokemonByName फ़ंक्शन के रूट दायरे पर एक रिक्त सरणी को परिभाषित करने का प्रयास किया और उस लिंक में .each विधि शो के प्रत्येक पुनरावृत्ति के साथ उस सरणी में डेटा को पुश करने का प्रयास किया, लेकिन मुझे लगता है कि मैं अभी भी उस सरणी को वापस नहीं कर सकता क्योंकि यह तथ्य के बाद होता है ।

बीटीडब्ल्यू, मैं वास्तव में मजेदार के लिए यह कर रहा हूं और मोंगोडीबी और नोड.जेएस के बारे में जानना चाहता हूं, इसलिए मैं मोंगोस जैसे ओडीएम का उपयोग नहीं करना चाहता हूं ताकि मेरे लिए यह कुछ काम कर सके।

किसी भी मदद के लिए धन्यवाद!

संपादित

बस उत्सुक, किसी को भी है कि इस पढ़ के लिए, क्यों इस सवाल downvoted हो रही है? क्या ऐसा इसलिए है क्योंकि उत्तर अन्य, समान प्रश्नों, या कुछ और से प्राप्त किया जा सकता है?

धन्यवाद!

+1

संभावित डुप्लिकेट [एक एसिंक्रोनस कॉल से प्रतिक्रिया कैसे वापस करें?] (Http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call) –

+1

इसे जांचें: http://stackoverflow.com/questions/19696240/proper-way-to-return-json-using-node-or-express –

+0

ये दो लिंक असंबद्ध हैं। वास्तव में यह नहीं मिला कि यह क्यों कम हो गया है। – Genc

उत्तर

5

मैं नोड के देशी monogodb ड्राइवर GitHub पेज की मदद से मेरे सवाल का जवाब करने में सक्षम था: See here.

संक्षेप में, मैं सिर्फ MongoClient के कनेक्शन समारोह के भीतर मेरे निर्यात समारोह को परिभाषित किया गया था था। किसी कारण से मैंने सोचा कि नोड निर्यात मॉड्यूल की जड़ में होना चाहिए था, लेकिन ऐसा नहीं है। यहाँ एक समाप्त संस्करण है:

'use strict'; 

var MongoClient = require('mongodb').MongoClient; 
var assert = require('assert'); 

// db url 
var url = 'mongodb://localhost:27017/pokemon'; 

var findDocuments = function(db, callback) { 
    // Get the documents collection 
    var collection = db.collection('pokemons'); 
    // Find some documents 
    collection.find({name: 'Dratini'}).toArray(function(err, docs) { 
    assert.equal(err, null); 
    // assert.equal(2, docs.length); 
    console.log("Found the following records"); 
    callback(docs); 
    }); 
} 

// Use connect method to connect to the Server 
MongoClient.connect(url, function(err, db) { 
    assert.equal(null, err); 
    console.log("Connected correctly to server"); 
    findDocuments(db, function(docs) { 
    console.log(docs); 
    exports.getPokemonByName = function() { 
     return docs; 
    } 
    db.close(); 
    }); 
}); 

और फिर एक और फाइल में:

var express = require('express'); 
var router = express.Router(); 

router.get('/pokedex', function (req, res) { 
    res.jsonp(db.getPokemonByName()); 
}); 
बेशक

, इस समाधान की आवश्यकता है कि मैं प्रश्नों को हार्डकोड, लेकिन मैं अब के लिए उस के साथ ठीक हूँ। जब मैं आऊंगा तो उस पुल को पार कर दूंगा।

0

इस मदद मिल सकती है

var cursor = db.collection('pokemons').find({name:name}).toArray(function(err,arr){ 
    return arr; 
}); 
+1

नहीं, आप एक एसिंक्रोनस कॉल से मूल्य इनलाइन वापस नहीं कर सकते हैं। –

0

आप पा समारोह पर कॉलबैक का उपयोग कर सकते json वापस जाने के लिए। प्रयास करें

exports.getPokemonByName = function (name,callback) { 

    MongoClient.connect(url, function(err, db) { 
    assert.equal(null, err); 
    var cursor = db.collection('pokemons').find({name: name},function(err,result){ 
     if(err) 
     { 
     callback(err,null); 
     } 

     if(result) 
     callback(null,result); 
    }); 

    }); 

}; 

router.get('/pokedex', function (req, res) { 
    db.getPokemonByName('Dratini',function(err,result){ 
    if(result) 
    { 
     res.jsonp(result); 
    } 
    }); 

}) 
+0

'getPokemonByName (name) 'फ़ंक्शन अभी भी कुछ भी वापस नहीं करता है, हालांकि। –

+0

संपादन की जांच करें। जेसन वापस करने के लिए अब कॉलबैक का उपयोग करना। –

+1

ऐसा लगता है कि इसे काम करना चाहिए लेकिन एक परिपत्र संदर्भ त्रुटि उत्पन्न करता है: 'TypeError: परिपत्र संरचना को JSON' में कनवर्ट करना। क्यों नहीं कह सकता –

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