Передача сообщения об ошибке в шаблон через перенаправление в Express / Node.js - PullRequest
12 голосов
/ 16 августа 2011

В моем приложении 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 в моем коде, и я предпочел бы избежать этого.Есть ли другой способ сделать это?

Ответы [ 2 ]

8 голосов
/ 16 августа 2011

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

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

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

3 голосов
/ 14 ноября 2013

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

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

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

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

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

...