在res.redirect上传递variables

有没有一种简单的方法可以在node.js / express中传递res.redirectvariables,而不必将其附加到URL中,或者将其存储在cookie或会话variables中?

我为什么要这样做? 这里是一个例子:

假设我在/ users有一个用户页面。 我可以添加用户在页面/用户/添加。 我将表单发布到/ users / add,如果有错误,它将重新加载带有错误消息的表单,如果成功,它会redirect到/ users页面。 我想要的是能够知道我刚刚添加一个用户,并显示一个成功的消息。

这是一个post的例子:

exports.usersAddPost = function(req, res, next) { // validate form if (!validated) { // go back to form return res.render('users/add', req.body.whatever); } else { // go back to users list // need some way to tell users page that a user was just added return res.redirect('users'); } }; 

我实际上决定使用会议,因为我find了一个很好的方式来优雅地做到这一点。

在redirect之前,我设置会话如下所示:

 req.session['success'] = 'User added successfully'; res.redirect('users'); 

在用户页面上,我检查一个成功variables,并将其传递给我的模板,如果它存在,然后重置它,我只是将其设置为null。 这适用于我所需要的。

如果你可以使用javascript,你可以使用http referer,并假设刚刚添加一个用户,因为根据你的工作stream程,这是唯一可能发生的事情:

 document.referrer == "/users/add" 

那么用元刷新显示简单的HTML呢? 例:

 function redirectFlash(url, timeout, msg) { var defaultTimeout = 5; if (typeof timeout === 'string') { msg = timeout; timeout = defaultTimeout; } else if (timeout === undefined) { msg = ''; timeout = defaultTimeout; } return '<html><head><title>Redirecting ...</title><meta http-equiv="refresh" content="' + timeout + ';url=' + url + '"></head><body>' + msg + '<br /><a href="' + url + '">Click here to return manually</a></body></html>'; } exports.usersAddPost = function(req, res, next) { // validate form if (!validated) { // go back to form return res.render('users/add', req.body.whatever); } else { // go back to users list // need some way to tell users page that a user was just added return res.end(redirectFlash('/users', 'User added successfully. Returning you to the user list ...')); } };