Как остановить маршрутизацию по заданному маршруту в случае сбоя проверки

#node.js #express #ejs

#node.js #выразить #ejs

Вопрос:

В моем файле signup.ejs я настроил форму с запросом post и написал / welcome route в signup.js файл, я пытаюсь выяснить, как я могу остановить запрос post к данному маршруту, если проверка завершается неудачей, или как я могу динамически назначить другой маршрут, например маршрут ошибки ( localhost:3000/signup/error вместо localhost:3000/signup/welcome , если проверка завершается неудачей), поскольку при каждом сбое регистрации маршрутизируется на localhost:3000/signup/welcome , что неправильно. Я попытался настроить переменные в файле signup.ejs, чтобы передать его в действие, однако он перенаправляет только в / welcome и не перенаправляет в / error. В принципе, я просто хочу увидеть конечную точку ошибки или просто остановить запрос POST, если проверка завершается неудачей. Пожалуйста, предложите.

регистрация.ejs

 <h2>Sign Up</h2>


<% var route = ''; %>
<% if (!messages.error) { %>
<% route = '/welcome' %>
<% }else{ %>
<% route = '/error' %>
<% } %>


<form action="signup<%- route %>" method="post" name="form1">
  

signup.js

 router.post('/welcome', function(req, res, next) {

   req.checkBody('name', 'Name cannot be empty').notEmpty();
   req.checkBody('email', 'Please enter valid email').isEmail();
   req.checkBody('password', 'Password should be more than 5').isLength({ min: 5 });
   req.checkBody('password1', 'Password do not match').equals(req.body.password);

   var errors = req.validationErrors();

   if(!errors) {
       var user = {
         name: req.sanitize('name').escape().trim(),
         email: req.sanitize('email').escape().trim(),
         password: req.sanitize('password').escape().trim()
       }
       connection.query('Insert into customers set ?', user, function(err, result) {
        if(err) {
           req.flash('error', err);
           //render to signup
           res.redirect('/signup', {
               title: 'Add New User',
               name: user.name,
               email: user.email,
               password: user.password
           })

        }
            req.flash('success', 'Successfully signed up');
            res.render('welcome', {
                title: 'Signed In'
            });

    })
   }else {
    var error_msg = ''

    errors.forEach(function(error) {
        error_msg  = error.msg   '<br>'
    })
    req.flash('error', error_msg);
    res.render('signup', {
        name: req.body.name,
        email: req.body.email,
        password: req.body.password
    })
}
});
  

Комментарии:

1. Непонятно, о чем именно вы спрашиваете. Если вы хотите, чтобы конечный пользователь увидел URL-адрес конечной точки с ошибкой, например /signup/error , в браузере после ошибки, то вы можете просто перенаправить на этот URL-адрес и создать маршрут на своем сервере, чтобы этот URL-адрес отображал нужную страницу с ошибкой.

2. Также кажется, что вы, возможно, не понимаете, что req.flash() делает. Это устанавливает некоторое состояние (во временном файле cookie) для СЛЕДУЮЩЕГО маршрута, который попадает на ваш сервер. Таким образом, нет смысла делать то, за чем req.flash() следует немедленно быть res.render() . Обычно вы следуете ему с помощью res.redirect() , и тогда перенаправленный URL-адрес будет иметь доступ к данным, которые вы задаете в req.flash() . Примеры здесь .

3. @jfriend00 Я. Я могу, но что, если пользователь успешно зарегистрирован, который должен перенаправить пользователя в / welcome, я не знаю, как я могу настроить два маршрута в форме.

4. Я все еще не понимаю вопроса. Вы можете перенаправить на /welcome или на /signup/error в зависимости от того, произошла ошибка или нет. Форма не определяет, куда пользователь пойдет дальше. Форма определяет маршрут, по которому отправляются данные формы. Ваш сервер определяет, что произойдет после отправки формы. Вы либо перенаправляете на новый URL, либо выдаете ответ.