2015-01-16 2 views
0

Я использую мангуст на моем приложении узла, и я хочу, чтобы продавец своей электронной почты:Mongoose не возвращается, но Монго оболочка

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, он возвращается правильно.

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() функцию, и она прекрасно работает ,

EDIT 1:

Использование Mongoose отладки, вот что это напечатано:

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

I была такая же проблема, возможно, вы могли бы попробовать следующее:

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

Это разрешило мое, надеюсь, что оно решит и ваше!

+0

Уже попробовал, что никакого успеха. Я заметил еще одну вещь, эта функция также называется, когда продавец хочет зарегистрироваться, поэтому я звоню, чтобы проверить, не отправлено ли электронное письмо в db, и это работает! Он возвращается правильно! На самом деле, понятия не имею, почему при входе в систему это не так. Оба вопроса точно такие же .. Я проверил их на 'mongoose.set ('debug', true);' –

+0

@KayanAlmeida Что вы специально пробовали? Ключевым моментом является то, что как обратные вызовы 'find', так и' findOne' принимают два параметра, а не один. – JohnnyHK

+0

@JohnnyHK Я отредактировал свой ответ с выходом отладки mongoose, но, как я уже говорил, этот 'findOne' вызывается раньше, чтобы проверить уникальность электронной почты и отлично работает. Это ту же функцию, с тем же входом. Может быть, проблема подключения? –

Смежные вопросы