मुझे नोडज में अपने सर्वर पर कुछ डेटाबेस मान वापस करने में परेशानी हो रही है, ऐसा लगता है कि जिस तरह से मान खो गए हैं।

परिणाम ठीक लॉग किया गया है और मुझे अपना डेटा मिल रहा है, लेकिन यह वापसी में खो गया है।

exports.getProducts = async function () {

return await MongoClient.connect(url, {useNewUrlParser: true}, async function 
(err, client) {
let db = client.db(dbName);
return await db.collection('products').find({}).toArray(async function (err, 
result) {
  if (err) throw err;
  client.close();
  console.log(result);
  return await result
});
});
}
-1
Bowa 3 सितंबर 2018, 21:52

2 जवाब

आपको जावास्क्रिप्ट में asynchronous, callback और promise के बारे में सीखना चाहिए, उसके बाद आप जावास्क्रिप्ट के साथ आसानी से काम कर सकते हैं, और नीचे मेरा कोड आपको समझ में आ सकता है।

हमारे लिए सौभाग्य की बात है कि अब 2018 है, synchronous function को चलाने का सिंटैक्स async/प्रतीक्षा के साथ बहुत आसान है। इस मामले में getProducts को synchronously चलाया जाना चाहिए और इस तरह होना चाहिए:

app.get('/api/products/', async function(req, res, next) {
    const myData = await mongo.getProducts();
    res.send(myData);
});

संपादित करें: mongodb.js को थोड़ा अपडेट किया जाना चाहिए:

exports.getProducts = function() {
   return mongoClient.connect(url, {useNewUrlParser: true }, function(err, client) { 
      let db = client.db(dbName);

      return db.collection('products').find({}).toArray( function(err, result) { . 
          if(err) throw err;
          client.close();
          return result;
   }
   })
}

प्रश्न: क्या अंतर है? उ: await Promise के value के साथ हल होने की प्रतीक्षा कर रहा है। ताकि, getProducts को return से Promise करना पड़े।

0
Kai 3 सितंबर 2018, 22:07
ठीक है तो मुझे इसे अतुल्यकालिक बनाने की आवश्यकता है। आपका कोड अभी भी काम नहीं कर रहा है। मैंने देखा है कि आप हर नए नेस्टेड फ़ंक्शन के लिए वापस आते हैं, इससे मदद नहीं मिली। परिणाम अभी भी सभी तरह से पास नहीं होगा
 – 
Bowa
3 सितंबर 2018, 22:16
उपरोक्त वे कोड सिर्फ मेरे विचार का वर्णन कर रहे हैं ठीक नहीं। मैंने यह बताने की कोशिश की कि आप क्या खो रहे हैं। और हां, आपको Promise बाहरी फ़ंक्शन पर वापस करना होगा :)
 – 
Kai
4 सितंबर 2018, 15:13
मैंने तदनुसार अपना कोड अपडेट किया है और एसिंक्स फ़ंक्शंस पर पढ़ा है। यह अभी भी मुझे एक अपरिभाषित मूल्य देता है। मुझे लगता है कि यह प्रकृति के साथ क्या करना है अगर मोंगोडब फायरबेस के रूप में उपरोक्त कोड के साथ पूरी तरह से काम करता है?
 – 
Bowa
5 सितंबर 2018, 10:50

यहाँ इस कोड को mongodb.js . में आज़माएँ

const MongoClient=require('mongodb').MongoClient
const assert=require('assert')


const url='mongodb://localhost:27017';

const dbName="productstoredb"


var Result;
var MongoDB;

var MongoConnect = new Promise((resolve, reject) => {
    var Db = MongoClient.connect(url, { useNewUrlParser: true }, function (err, client) {
        if (err) {
            resolve("error")
        }
        MongoDB = client.db("dbName")
        MongoDb.db(dbName)
        resolve("connected to the Database")
    })
})

var MongoView = new Promise((resolve, reject) => {
    MongoDB.collection("products").find().toArray(function (err, result) {
        if (err) resolve("ERROR");
        Result = result;
        resolve("success")
    })
})

exports.getProducts = async function () {
    console.log(await MongoConnect);
    console.log(await MongoView);
    return Result;
}

और अपने एपीआई में await भी जोड़ें

app.get('/api/products', function (req, res) {
    var mydata = await mongo.getProducts();
    res.send(Mydata)

})

आपको Google Promise,async-await करना चाहिए। आपके mongodb से कनेक्शन तुरंत नहीं होता है। आपका कोड आपके डेटाबेस से कनेक्ट करने के लिए कॉल करता है फिर यह कोड की अगली पंक्ति को भी निष्पादित करना शुरू कर देता है इससे पहले कनेक्शन स्थापित हो जाता है।

0
xxxgrime 3 सितंबर 2018, 23:20
क्षमा करें जो मुझे अपरिभाषित का एक ही परिणाम देता है, मुझे आश्चर्य है कि अगर mongoDB कुछ अलग करता है। उदाहरण के लिए यह फायरबेस के साथ एकदम सही काम करता है।
 – 
Bowa
4 सितंबर 2018, 10:45
क्या आपका mongod.exe इंस्टेंस कनेक्शन पंजीकृत करता है ??
 – 
xxxgrime
4 सितंबर 2018, 18:50