在不丢失页面的情况下向表单添加 flash 消息

Add flash message to form without losing page

我正在使用 node.js 和 express 来制作一个 CRUD 网络应用程序,我正在尝试弄清楚如何在服务器端验证失败时让一条闪现消息出现在数据输入表单上。我正在使用 express-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?我不需要编辑中的所有数据,将进行客户端验证以希望发现任何错误,但我希望服务器端验证错误导致用户在他们离开时登陆同一对象页面。

您可以将 post 路线声明为:

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

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

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

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