Это самая странная и самая неприятная проблема, с которой мне еще приходилось сталкиваться в Node.js и Mongoose. Я не знаю, почему это вообще происходит, но ни одна из моих функций модели не выполняется. Например, у меня есть модель:
const UserSchema = new Schema({
email : {...},
password: {...},
etc...
module.exports = UserSchema
Все схемы находятся в собственном файле, а затем превращаются в модели в models/index.js:
const UserSchema = require('./UserModel')
const User = mongoose.model('users', UserSchema)
module.exports.User = User
Есть маршруты к /login и /register, и эти маршруты раньше работали нормально, но теперь кажется, что настоящие вызовы мангуста, такие как findOne, на самом деле никогда не вызываются, и это полностью ставит меня в тупик.
Вот пример того, что я имею в виду:
// This is inside an AuthController, which is called by the Express router
console.info('a')
UserModel.findOne({'email':email}, (error, result) => {
console.info('b')
if (error) callback(error)
else callback(null,result)
})
Теперь я всегда вижу «а» в консоли, но мне никогда не выдается ошибка или результат. Например, «b» никогда не будет напечатано на консоли.
Есть что-то простое, что мне не хватает? Почему он сломался, казалось бы, из ниоткуда? Почему эти функции не вызываются?
Модель импортирована в контроллер из файла models/index.js, о котором я упоминал в OP. const UserModel = require('../models').User
Я бы предложил начать с проблем с подключением к БД. Это единственная причина, которая приходит на ум.
Разве это не должно по крайней мере вызвать ошибку и вызвать один из моих обратных вызовов? Я использовал Mlab для тестирования, и они не упали. Это просто такая странная проблема для меня
Итак, @estus, ваш комментарий меня заинтересовал, поэтому я console.infoged mongoose.connection.readyState. Оказывается, когда модуль mongoose-seeder, который я написал, закрывает свое соединение, он также закрывает исходное соединение. Тем не менее удивлен, что это не приводит к ошибке.
Я не помню, что именно происходит под капотом, но это связывает обещание соединения в запросах. Если соединение закрыто, оно может ожидать нового соединения или что-то в этом роде. Вы можете открыть вопрос на GH относительно этой ситуации.





Что-нибудь изменилось с тех пор, как это заработало? Кроме того, как вы импортируете модель в контроллер?