#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, либо выдаете ответ.