Res.redirect('назад') с параметрами

У меня есть форма регистрации на каждой странице моего сайта. Во время регистрации может возникнуть некоторая ошибка. После обнаружения ошибки я должен вернуть пользователя на предыдущую страницу, показывая некоторое сообщение об ошибке. Проблема в том, что я не знаю, с какой страницы пользователь выполнил регистрацию, поэтому я использую res.redirect('back');. Однако я не могу просто перенаправить пользователя обратно, я должен также отобразить сообщение об ошибке, поэтому мне нужно передать какой-то аргумент. Но res.redirect('back', (reg_error:'username')}) нельзя использовать напрямую, потому что res.redirect() не поддерживает параметры. Как сделать предыдущую страницу с некоторым параметром?

Ответ 1

Использование заголовка реферирования для поиска того, на какой странице вы попали, может оказаться полезным:

app.get('/mobileon', function(req, res){
  backURL=req.header('Referer') || '/';
  // do your thang
  res.redirect(backURL);
});

Вы также можете сохранить backURL в req.session, если вам нужно, чтобы он сохранялся на нескольких маршрутах. Не забудьте проверить наличие этой переменной, например: res.redirect(req.session.backURL || '/')


edit: Так как мой ответ получил некоторые upvotes, я набрал свой текущий способ сделать это. Это получилось немного длиннее, поэтому вы можете просмотреть его на https://gist.github.com/therealplato/7997908.

Самое важное отличие заключается в использовании явного параметра "отскока" в строке запроса, которая переопределяет URL-адрес Referer.

Ответ 2

Очень простой способ реализовать это - использовать connect-flash, промежуточное программное обеспечение для выражения, которое использует промежуточное программное обеспечение сеанса, встроенное в выражение для передачи сообщений 'flash', чтобы следующий запрос.

Это означает, что вам не нужно добавлять поля для отслеживания URL-адресов или сообщений в шаблоны формы или маршрута для ваших просмотров.

Он предоставляет простую версию той же функции в Ruby on Rails.

(очевидно, вы должны использовать Express framework для этого, но я настоятельно рекомендую это тоже!)

Подключите его так:

var flash = require('connect-flash');
var app = express();

app.configure(function() {
  app.use(express.cookieParser('keyboard cat'));
  app.use(express.session({ cookie: { maxAge: 60000 }}));
  app.use(flash());
});

И затем используйте его следующим образом:

app.get('/flash', function(req, res){
  req.flash('info', 'Flashed message')
  res.redirect('/');
});

app.get('/', function(req, res){
  res.render('index', { message: req.flash('info') });
});

Ответ 3

Если вы используете сеансы, вы можете просто добавить этот объект reg_error к объекту req.session перед перенаправлением. Затем он будет доступен в объекте req.session при загрузке предыдущей страницы.

Ответ 4

Вы можете просто перенаправить его как res.redirect('..?error=1')

тег ? сообщает браузеру, что это набор необязательных параметров, а .. - это только относительный отзыв пути (например, вызов cd .. на терминале для перемещения по одному каталогу) и ваш браузер направит на соответствующую страницу с этим тегом в конце: http://.....?error=1

то вы можете просто вытащить ошибку на соответствующей странице, выполнив:

if (req.param("error" == 1)) { 
// do stuff bassed off that error match
};

вы можете жестко кодировать несколько разных значений ошибок и реагировать соответствующим образом в зависимости от произошедшей ошибки

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

Ответ 5

Вы должны добавить параметр страницы в форму. Затем вы можете прочитать его на сервере и использовать его для перенаправления.

res.redirect(page, {reg_error:'username'}) // page being the url to redirect to.