Один из маршрутов в моем веб-приложении Node.JS должен запрашивать MongoDB и возвращать пользователя и урок, определять прогресс пользователя на уроке, а затем отображать страницу из шаблона с помощью EJS.Кажется, что он идет и правильно извлекает информацию, но затем, по какой-то причине, он возвращается назад и не может найти урок.Затем программа зависает, ожидая ответа.Что здесь происходит?Я не уверен, является ли это какой-то проблемой, вызванной асинхронной природой запросов монго.Любая информация будет полезна.Спасибо!
app.get('/lessons/:lesson', (req, res) => {
if(req.isAuthenticated()){
console.log('User authenticated');
const paramLesson = req.params.lesson;
User.findById(req.user.id, function (err, foundUser) {
if(err){
console.log(err);
}
if (foundUser){
console.log("User found: " + foundUser.id);
Lesson.findOne({ code: paramLesson }, (err, foundLesson) => {
if(err){
console.log(err);
}
if(foundLesson) {
console.log('Lesson found: ' + foundLesson.code);
// Check all progress to see if there is a value for this lesson, if not create a document
progress = foundUser.progress.find( (prog) => {
return prog.lessonId === foundLesson.code;
})
console.log('Progress found: ' + progress.currentProgress);
if(progress){
console.log('Rendering lesson...');
return res.render('example', {lesson: foundLesson, user: foundUser, progress: progress.currentProgress});
} else { // Create progress document for user if none exists for this lesson
console.log("Inserting lesson progress");
// object to insert for current lesson
let lessonProgress = {
lessonId: paramLesson,
currentProgress: 0,
complete: false
};
foundUser.progress.push(lessonProgress);
foundUser.save();
console.log('redirecting to /lessons/' + paramLesson);
return res.redirect("/lessons/" + paramLesson);
}
} else {
console.log('No lesson found!');
}
});
} else {
console.log('No user found!');
}
});
} else {
console.log('User not authenticated');
return res.redirect('/login');
}
});