Проверка данных w/ Express до зависания страницы после публикации, когда данные недействительны

#node.js #express #post #express-validator

Вопрос:

Я использую экспресс-валидатор, чтобы выяснить, соответствуют ли определенные пользовательские данные определенным ключевым словам. Если какой-либо из входных данных неверен, запрос POST в мою базу данных не должен быть сделан. Если все входные данные проходят, то СООБЩЕНИЕ должно пройти. Пользователь должен быть перенаправлен на /submitted представление, когда входные данные являются допустимыми или недопустимыми.

Когда ни один из входных данных не является допустимым, запись не создается и база данных не обновляется (что хорошо, так как я не хочу, чтобы в базе данных были неверные данные), но проблема в том, что страница зависает и никогда не перезагружается (это нужно делать вручную).

У меня есть заявление if/else ниже, в котором говорится, что следует делать, если данные неверны. Консоль говорит об этом applicant.end() и res.end() не является функциями. Есть ли что-то еще, что я могу написать, что «остановит» запрос, но сделает перенаправление?

 app.post(
    "/application/submit",
    [
        check("_a1").matches("phrase-boundaries"), 
        check("_a2").matches("policy"),
        check("_a3").matches("src-authenticity"),
        check("_a4").matches("provide-phonics"),
    ], // each dropdown contains a value (i.e. ".a1" class has the value of "phrase-boundaries"), and those values need to match the text
    (req, res) => {
        const errors = validationResult(req);
        const applicant = new Applicant(req.body);

        if (!errors.isEmpty()) {
            // if there are errors
            console.log("applicant provided wrong answer(s)");

            res.end() // The console says that applicant.end() and res.end() are not functions. Is there something else that I can write here that'll "stop" the request but do the redirect?
                .then((result) => {
                    res.redirect("/submitted");
                })
                .catch((err) => {
                    console.log(err);
                });
        } else {
            console.log("right answers");
        }

        applicant
            .save()
            .then((result) => {
                res.redirect("/submitted"); // this works when all of the checks pass
            })
            .catch((err) => {
                console.log(err);
            });
    }
);
 

Ответ №1:

Я обновил код следующим образом:

 if (!errors.isEmpty()) {
     console.log("applicant provided wrong answer(s)");
     res.redirect("/submitted");
     return;
} else {
     console.log("right answers");
}

applicant
    .save()
    .then((result) => {
 

и страница теперь ведет себя так, как ожидалось. Перенаправление выполняется и return делает это так, чтобы applicant.save() этого не произошло.