2016-06-09 3 views
2

Я использую Мангуст:MongoDB find не возвращает ошибку, если запись не существует?

user.find({username: 'xyz'}, function(err, doc){ 
    if(err){ 
    res.render('error', {errorMsg: "Error blah blah"}) 
    } 
}); 

Я намеренно с помощью пользователя, который не существует хуг, и это не вызывает каких-либо ошибок, я подумал, что это из-за мангуста, но тогда я попробовал в MongoDB оболочки и yes MongoDB не вернет ошибку, если запись не существует.

>db.accounts.find({username: 'xyz'}) 
> // no error, blank line 

Как с этим справиться? Я хочу, чтобы выполнение скрипта прекратилось, если пользователь не существует.

+0

Возможные контратип https://stackoverflow.com/questions/12031041/node-js-mongojs-findone-callback-returning-error-as-null – JohnnyHK

+0

Да, это один из 3 лет назад. Вещи постоянно меняются, особенно с NodeJS. –

+0

Конечно, но это не изменилось. Запрос, который ничего не соответствует, возвращает пустой набор результатов (для 'find') или нулевой результат (для' findOne'). – JohnnyHK

ответ

2

Ну, если «имя пользователя» не существует, это не означает, что есть ошибка. Вместо этого вы должны сделать что-то подобное.

user.find({ username: 'xyz' }, function(err, doc){ 
    if(doc.length === 0 || err){ 
    res.render('error', { errorMsg: "Error blah blah" }) 
    } 
}); 

Или более подробная версия:

user.find({ username: 'xyz' }, function(err, doc) { 
    if(err){ 
     res.render('error', { errorMsg: "Error blah blah" }) 
    } else { 
     if (doc.length === 0) { 
      console.log("User doesn't exist"); 
     } else { 
      //do something 
     } 
    } 
}); 
+0

Да, я предполагаю, что это вызовет ошибку. Благодаря! Я даже не думал о проверке, пустой ли документ! –

1
var user = db.accounts.findOne({username: 'xyz'}); 

if (!user) { 
    // handle error 
    alert('fail'); 
} 
+2

Спасибо, но я не могу придумать, как я могу это использовать. Я имею в виду, что это будет какая-то работа в оболочке Mongo (нет предупреждения в любой оболочке или NodeJS), но должен быть обратный вызов, который возвращает результат из-за асинхронного характера NodeJS. Даже если я не использую Mongoose, я не уверен, что это сработает, если это не какой-то новый хак, о котором я не знаю. Но да, так это то, как вы это сделаете в синхронной среде. –

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