2015-02-17 6 views
0

Я использую 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/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 были отправлено без потери идентификатора страницы? Мне не нужны все данные из редактирования, будет проверка на стороне клиента, чтобы, надеюсь, подобрать какие-либо ошибки, но я бы хотел, чтобы ошибки проверки на стороне сервера заставили пользователя приземлиться на той же странице объекта, что и они.

ответ

1

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

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

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

* Редактировать * Чтобы использовать флеш-память для перенаправления, вам необходимо добавить ее промежуточное ПО.

app.configure(function() { 
    app.use(express.cookieParser('keyboard cat')); 
    app.use(express.session({ cookie: { maxAge: 60000 }})); 
    app.use(flash()); 
}); 
+0

Я попытался это, добавляя 'res.redirect (req.get ('реферер'));' 'Перед res.render ('редактировать', {сообщения: req.flash ('информация')}); '(который находится в почтовом маршруте). Это перезагружает страницу правильно, но флэш-сообщение не отображается. – Carasel

+0

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