2011-08-16 2 views
12

В моем приложении Node.js, у меня есть функция (маршрутизируемая курьерский), который представляет собой форму для пользователя:Передача сообщения об ошибке через шаблон перенаправление Экспресса/Node.js

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

+0

http://stackoverflow.com/q uestions/5555053/how-to-validate-and-handle-a-form-in-express-nodejs/5558861 # comment16886850_5558861 – chovy

ответ

8

Вам необходимо использовать flash notifications, и он встроен в экспресс.

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

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

+1

flash не работает в узле 4.0 или с шаблонами, такими как усы. – ingrid

3

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

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

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

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

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

+0

Спасибо за альтернативу, но почему и когда это было бы лучше, чем использование флеш-уведомлений? – brandizzi

+1

О, ничего себе, не заметили, что вы даже предложили это самому в нижней части вашего вопроса - не думайте, что на самом деле есть очевидные преимущества; это немного проще реализовать, а ошибки немного более заметны/отслеживаются, так как они находятся на URL-адресе, но они должны выполнить одно и то же. Если ваш {сделать что-то} немного больше задействован, чем просто отображать что-то, это, вероятно, немного небезопасно, чтобы обрабатывать его таким образом, так как пользователи могут использовать его, набирая сами сообщения об ошибках по URL-адресу, но в противном случае просто более прямолинейно – gadu

Смежные вопросы