簡體   English   中英

MongoDB返回“未定義”的node.js

[英]MongoDB returns “undefined” node.js

我正在為當前項目使用node.js和monogdb。 我遇到了我想解決的問題,但沒有希望。 因此,我需要您的幫助。 我在將Mongo查詢回調的結果傳遞到main.js中的路由時遇到問題。 在mongoDB.js類中,我具有以下功能:

DBManagerConnection.prototype.findSubscriber = function(id){
   database.Subscriber.findOne({subscriberId:id}, function(err, subscriber){
      if(err || !subscriberid){ 
        console.log("No Subscriber recoard here");
      }else{
        console.log("Find:");
        console.log(subscriber);
        return subscriber;
      }
   });
 }

該函數的輸出為:

Find:
{ _id: 53a597665f8930ed1665c612,
  subscriberId: 'Sub8efc871fc6fc43765b2c9',
  subscriberName: 'Sub1',
  subscriberDevices: [],
  subscriberIndex: [],
  date: Sat Jun 21 2014 10:32:06 GMT-0400 (EDT) }

到目前為止一切順利,但是當我為main.js調用此函數時,它將返回“未定義”,如下所示:

var subb = null;
subb = db.findSubscriber('CPNsSub8efc871fc6fc43765b2c9');
setTimeout(function(){console.log(subb)}, 1000);

輸出未定義。

誰能幫我嗎? 謝謝

您的findSubscriber函數不返回任何內容,因此將其設置為undefined

我將嘗試使之更清楚:

DBManagerConnection.prototype.findSubscriber = function(id){

  database.Subscriber.findOne({subscriberId:id}, function(err, subscriber){
    if(err || !subscriberid){ 
      console.log("No Subscriber recoard here");
    } else{
      console.log("Find:");
      console.log(subscriber);
      return subscriber;
    }
  });

};

您的return行位於function(err, subscriber){函數內部,而不位於function(id){函數內部。 因此,在這種情況下,當您執行return subscriber; ,你是該值返回到的邏輯.findOne ,不是的調用點.findSubscriber

通常,您要完成的工作將通過另一個回調完成:

DBManagerConnection.prototype.findSubscriber = function(id, callback){
  database.Subscriber.findOne({subscriberId:id}, function(err, subscriber){
    if(err || !subscriber){ 
      console.log("No Subscriber record here");

      callback(err, null);
    } else{
      callback(null, subscriber);
    }
  });
};

db.findSubscriber('CPNsSub8efc871fc6fc43765b2c9', function(err, subscriber){
  console.log(err, subscriber);
});

使用“ return”關鍵字在異步調用中傳回值將不起作用。 您需要使用回調將其傳遞回去。 這是代碼:

DBManagerConnection.prototype.findSubscriber = function(id, callback){
   database.Subscriber.findOne({subscriberId:id}, function(err, subscriber){
     if(err || !subscriberid){ 
       console.log("No Subscriber recoard here");
       callback({message: "Not found"});
     }else{
       console.log("Find:");
       console.log(subscriber);
       callback(null, subscriber);
     }
   });
};


db.findSubscriber('CPNsSub8efc871fc6fc43765b2c9', funciton(err, result) {     
  if (err) {
    console.log(err);
  } else {
    console.log(result);
  }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM