Добавить флеш-сообщение в форму без потери страницы

Я использую node.js и экспресс для создания веб-приложения CRUD, и я пытаюсь понять, как заставить всплывающее сообщение появляться в форме ввода данных, когда проверка на стороне сервера не удалась. Я использую экспресс-вспышку для флэш-сообщений.

Код проверки работает, возвращая ошибки, и я создаю флэш-сообщение:

var errors = validateForm(req);
if(errors){
    req.flash('info',errors);
    res.render('edit', {messages: req.flash('info')}); 
}

И отобразите сообщение в файле edit.jade:

if messages.info
    p #{messages.info} 

Проблема в том, что я редактирую конкретный объект, а URL не /edit, а /edit/objectID. Получение страницы выглядит следующим образом:

router.get('/edit/:id', function(req, res) {
    var db = req.db;
    var collection = db.get('mydb');
    collection.find({ID: req.params.id},{},function(e,docs){
        res.render('edit', {"object" : docs});
    });
});

Можно ли добавить флэш-сообщение для проверки на стороне сервера после отправки POST без потери идентификатора страницы? Мне не нужны все данные из редактирования, будет проверка на стороне клиента, чтобы, надеюсь, выявить любые ошибки, но я хотел бы, чтобы ошибки проверки на стороне сервера заставляли пользователя приземляться на той же странице объекта, на которой он ушел.


person Carasel    schedule 17.02.2015    source источник


Ответы (1)


Вы можете объявить свой почтовый маршрут как:

router.post('/edit/:id', function(req, res) {
    // logic to check for errors
    // if errors, set flash message and 
    // redirect to /edit/:id
});

Затем вы можете использовать идентификатор в маршруте публикации для перенаправления на страницу редактирования того же ресурса, для которого пользователь разместил форму. Вы также сможете получить доступ к сообщениям об ошибках флэш-памяти в шаблоне.

* Изменить * Чтобы использовать flash при перенаправлении, вам нужно добавить его в промежуточное ПО.

app.configure(function() {
   app.use(express.cookieParser('keyboard cat'));
   app.use(express.session({ cookie: { maxAge: 60000 }}));
   app.use(flash());
});
person Shahzaib Ali Khan    schedule 17.02.2015
comment
Я пробовал это, добавляя res.redirect(req.get('referer')); перед res.render('edit', {messages: req.flash('info')}); (который находится в почтовом маршруте). Это правильно перезагружает страницу, но флэш-сообщение не отображается. - person Carasel; 17.02.2015
comment
Проверьте отредактированный ответ, чтобы решить эту проблему, если флэш-память еще не находится в промежуточном программном обеспечении. - person Shahzaib Ali Khan; 17.02.2015