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