Подтвердить что ты не робот

Передача сообщения об ошибке в шаблон с помощью перенаправления в Express/Node.js

В моем приложении Node.js у меня есть функция (маршрутизируется Express), которая представляет форму пользователю:

app.get('/register', function (req, res) {
  res.render('form');
});

У меня есть другая функция, перенаправленная на тот же URL-адрес, но который обрабатывает запросы POST, которые получают данные, представленные предыдущей формой. Если форма не проверяется, она перенаправляет пользователя обратно в форму; в противном случае он делает то, что нужно сделать:

app.post('/register', function (req, res) {
  if (validate(req.registerForm)) return res.redirect('back');
  persistStuff(req.registerForm, function (err, data) {
    // Do error verification etc.
    res.redirect('back')
  });
});

Что я хочу сделать, так это отправить сообщение об ошибке в строку:

if (validate(req.registerForm)) return res.redirect('back');

Чтобы написать что-то вроде

if (validate(req.registerForm)) return res.render('form', {msg:'invalid'});

неприемлемо, потому что я хочу следовать шаблону POST-REDIRECT-GET. Я мог бы сделать что-то вроде

if (validate(req.registerForm)) return res.redirect('/register?msg=invalid');

но он будет жестко указывать URL-адрес в моем коде, и я бы предпочел избежать его. Есть ли другой способ сделать это?

4b9b3361

Ответ 1

Вам нужно использовать флеш-уведомления, и он встроен в экспресс.

Вы добавите такое сообщение: req.flash("error", "Invalid form...");

Вам понадобится динамический обработчик для добавления сообщений к вашему визуализированному шаблону или вы можете проверить те, которые TJ сделал для экспресс-доставки. (express-messages)

Ответ 2

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

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

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

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

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