添加flash消息到表单而不会丢失页面

时间:2015-02-17 09:32:41

标签: node.js express pug flash-message

我正在使用node.js和express来制作一个CRUD网络应用程序,我正在尝试找出当服务器端验证失败时如何在数据输入表单上显示一条flash消息。我正在使用快速闪存来发送flash消息。

验证码有效,返回错误,我创建了flash消息:

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后是否可以在不丢失页面ID的情况下为服务器端验证添加flash消息?我不需要编辑中的所有数据,会有客户端验证,希望能够发现任何错误,但我希望服务器端验证错误导致用户在他们离开的同一对象页面上着陆。

1 个答案:

答案 0 :(得分:1)

您可以将您的邮寄路线声明为:

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

然后,您可以使用后期路线中的ID重定向到用户发布表单的同一资源的编辑页面。您还可以访问模板中的Flash错误消息。

*编辑* 为了在重定向上使用flash,您需要将其添加到中间件中。

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