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

0 Carasel [2015-02-17 12:32:00]

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

node.js pug express


1 ответ


1 Решение Shahzaib Ali Khan [2015-02-17 13:32:00]

Вы можете объявить свой почтовый маршрут следующим образом:

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());
});