2015-01-16 87 views
0

我用我的節點的應用程序貓鼬,我想通過它的電子郵件得到賣家:貓鼬不返回,但蒙戈外殼爲

getSellerByEmail : function(email,next){ 
     var Seller = mongoose.model('Seller'); 
     console.log(inspect(email)); 
     Seller.findOne({'email' : new RegExp(email, 'i')}, function(seller){ 

      next(seller); 
     }); 
    } 

當我嘗試登錄,貓鼬不返回新用戶。但是,當我嘗試使用相同的電子郵件創建另一個用戶時,服務器正確執行此功能並返回新用戶。

也嘗試與{'email' : email}和它返回null,但是當我在mongo shell上執行此查詢時,它會正確返回。

db.sellers.findOne({email : '[email protected]'}); 
{ 
    "_id" : ObjectId("54b94759b042bdbf19cb7b97"), 
    "name" : "Nome da Empresa", 
    "cnpj" : "123123123", 
    "email" : "[email protected]", 
    "password" : "$2a$08$6UvW8Bux3CwUMok8ac12Sehbd.xCHnVUI51ZwhtGKBjkSa6/MrqUu", 
    "__v" : 0 
} 

我是新來的MongoDB +貓鼬,所以我知道這是一個愚蠢的問題,但我不能體會到什麼是錯的......我還創建了一個findSellerById()功能,它完美。

編輯1:

使用貓鼬調試,下面是它的打印的內容:

Mongoose: sellers.findOne({ email: '[email protected]' }) { fields: undefined } 
Mongoose: sellers.findOne({}) { fields: undefined } 

正如你所看到的,也試過不帶參數,沒有成功...

回答

1

傳入findOne的回調函數需要兩個參數(錯誤和文檔),所以您將seller視爲錯誤參數而不是doc參數。

所以你的函數應該是這樣的,而不是:

getSellerByEmail : function(email,next){ 
    var Seller = mongoose.model('Seller'); 
    console.log(inspect(email)); 
    Seller.findOne({'email' : new RegExp(email, 'i')}, function(err, seller){ 
     next(seller); 
    }); 
} 
+0

它的工作,非常感謝你!但是你知道爲什麼它以前有效嗎? –

+1

我不能說,但這絕對是正確的方法。 :) – JohnnyHK

2

我有同樣的問題,也許你可以試試這個:

Seller.find({email: seller.email}, function(err, seller){ 
    console.log(seller); 
}); 

這解決了我的問題,希望它能解決你的問題!

+0

已經嘗試過,沒有成功。我注意到另一件事,當賣家想要註冊時,這個函數也被調用,所以我打電話來檢查電子郵件是否已經在數據庫中,它的工作原理! 它返回正確!真的,不知道爲什麼在登錄它不。 這兩個查詢都完全一樣。我在'mongoose.set('debug',true)上檢查了它們;' –

+0

@KayanAlmeida你特別試過了什麼?關鍵在於'find'和'findOne'回調函數有兩個參數,而不是一個參數。 – JohnnyHK

+0

@JohnnyHK我用mongoose調試輸出編輯了我的答案,但正如我之前所說的,此'findOne'之前被調用,用於檢查電子郵件的唯一性,並且工作正常。這是相同的功能,具有相同的輸入。也許連接問題? –