Node.JS Express Проблемы с маршрутом GET с двумя запросами MongoDB, не находящими документ - PullRequest
0 голосов
/ 28 апреля 2019

Один из маршрутов в моем веб-приложении 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');
    }  
});
...