Предотвращение бесконечного цикла при условии ввода флажка - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть процесс отправки формы, где у меня есть промежуточное программное обеспечение с утверждениями if / else, которые проверяют наличие значений до того, как мой контроллер аутентификации запускается, но по какой-то причине мое поле ввода Checkbox вызывает ERR_TOO_MANY_REDIRECTS при отправке формы и даже когдаЯ пытаюсь загрузить страницу формы после отправки.Причина моей проверки undefined заключается в том, что я заметил, что тело не содержит этот ввод, если значение не проверено.Есть ли лучшее условие, чтобы использовать, чтобы проверить, проверено ли это значение или нет, что устранит цикл перенаправления, который я вижу?Есть ли способ настроить это промежуточное ПО на запуск только на POST-части маршрута?

Промежуточное ПО, которое я использую для /sign-up:

siteRoutes.use('/sign-up', function(req, res, next){
    console.log("Sign Up Use")
    console.log(req.body);
    models.User.findOne({
        where: {
            email: req.body.email
        }
    }).then(function(existingUser) {
    if (existingUser){
        req.flash('error', 'Email already exists.');
        return res.redirect('/sign-up');
    } else if (req.body.termsOfService === undefined) {
        console.log("TOS Check")
        req.flash('error', 'Accept terms');
        return res.redirect('/sign-up');
    } else {
        console.log("Next")
        next();
    }
    });
});

Поля ввода:

   <input type="text" class="form-control" id="sign-up-fist-name"  name="firstName" value="" placeholder="First Name">
                <br />
                    <input type="text" class="form-control" id="sign-up-last-name"  name="lastName" value="" placeholder="Last Name">
                <br />
                    <input type="text" class="form-control" id="sign-up-username"  name="email" value="{{user.email}}" placeholder="Email Address">
                <br />
                    <input type="password" class="form-control" id="sign-up-password"  name="password" value="" placeholder="Password">
                <br />
                    <input type="password" class="form-control" id="sign-up-confirm-password"  name="confirmPassword" value="" placeholder="Confirm Password">
                <br />
                    <label>
                        <input type="checkbox" name="termsOfService"> I confirm that I have read, consent and agree to Synotate's <a href="/terms-of-service">Terms of Service</a> and <a href="privacy-policy">Privacy Policy</a>
                    </label>

1 Ответ

0 голосов
/ 25 февраля 2019

Используйте req.method, чтобы определить, является ли запрос GET или POST.

Измените req.body.termsOfService === undefined на req.method === 'POST' && req.body.termsOfService === undefined.

Другой подход - использовать siteRoutes.get иsiteRoutes.post вместо siteRoutes.use

...