带参数的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.