带参数的res.redirect('back')

我在我的网站的每一页上都有registry格。 注册过程中可能会出现一些错误 捕获错误后,我必须将用户返回到上一页,显示一些错误消息。 问题是我不知道用户从哪个页面执行注册,所以我使用res.redirect('back'); 。 但是,我不能只redirect用户,我也必须显示错误消息,所以我必须通过一些参数。 但res.redirect('back', (reg_error:'username')})不能直接使用,因为res.redirect()不支持参数。 我怎样才能使用一些参数呈现上一页?

使用引用标头来查找用户来自哪个页面可能会有帮助:

 app.get('/mobileon', function(req, res){ backURL=req.header('Referer') || '/'; // do your thang res.redirect(backURL); }); 

如果您需要将backURL保存在多个路由中,您可能还需要在backURL中存储backURL 。 请记住要testing该variables的存在性,如: res.redirect(req.session.backURL || '/')


编辑:由于我的答案已经得到一些upvotes我打字我现在的方式来做到这一点。 它有一点点,所以你可以在https://gist.github.com/therealplato/7997908查看它。;

最重要的区别是在重写Referer url的查询string中使用明确的“跳动”参数。

实现这一点的一个非常简单的方法是使用connect-flash ,这是一个express的中间件,它利用express内置的会话中间件将“flash”消息传递给下一个请求。

这意味着你不需要添加字段来跟踪你的视图的表单或路由模式的url或消息。

它提供了Ruby on Rails中相同function的简单版本。

(显然你必须使用Express框架才能使用,但我也强烈推荐!)

像这样插入:

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

然后像这样使用它:

 app.get('/flash', function(req, res){ req.flash('info', 'Flashed message') res.redirect('/'); }); app.get('/', function(req, res){ res.render('index', { message: req.flash('info') }); }); 

如果您正在使用会话,则可以在redirect之前将该req.session对象添加到reg_error对象中。 然后,当您加载上一页时,它将在req.session对象上可用。

你可以简单地把它redirect为res.redirect('..?error=1')

这个? 标签告诉浏览器它是一组可选参数,而..只是一个path名的相对回忆(就像在terminal上回叫一个目录的cd ..一样),你的浏览器将直接进入相应的页面,结束: http://.....?error=1

那么你可以简单地通过执行一个适当的页面上的错误:

 if (req.param("error" == 1)) { // do stuff bassed off that error match }; 

您可以在几个不同的错误值中进行硬编码,并根据发生的错误进行适当的响应

请注意,这使得您的网页易于操作,因为用户可以键入自己的参数并让页面响应,所以请确保您采取的操作不是您不希望人们滥用的操作。 (应该罚款简单的错误显示)

您应该将页面参数添加到窗体。 然后,您可以在服务器上读取它并将其用于redirect。

 res.redirect(page, {reg_error:'username'}) // page being the url to redirect to.