f1n*_*1nn 42 redirect node.js express
我的网站每个页面都有一个注册表.注册期间可能会出现一些错误.捕获错误后,我必须将用户返回到上一页,显示一些错误消息.问题是我不知道用户从哪个页面进行了注册,所以我使用了res.redirect('back');.但是,我不能只是重定向用户,我也要显示错误信息,所以我必须传递一些参数.但res.redirect('back', (reg_error:'username')})不能直接使用,因为res.redirect()不支持参数.如何使用某个参数渲染上一页?
Pla*_*ato 40
使用referer标头查找用户来自哪个页面可能会有所帮助:
app.get('/mobileon', function(req, res){
backURL=req.header('Referer') || '/';
// do your thang
res.redirect(backURL);
});
Run Code Online (Sandbox Code Playgroud)
您可能还希望存储backURL在req.session中,如果您需要它可以在多个路径中保留.记得测试该变量的存在,例如:res.redirect(req.session.backURL || '/')
编辑:由于我的答案得到了一些赞成,我打了我目前的方式来做这件事.它有点长,所以你可以在https://gist.github.com/therealplato/7997908查看它.
最重要的区别是在查询字符串中使用显式"bounce"参数来覆盖Referer url.
Jed*_*son 27
实现这一点的一个非常简单的方法是使用connect-flash,一个用于express的中间件,利用express中内置的会话中间件将"flash"消息传递给下一个请求.
这意味着您无需添加字段来跟踪您的视图的表单或路由模式的URL或消息.
它在Ruby on Rails中提供了相同功能的简单版本.
(显然你必须使用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());
});
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
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') });
});
Run Code Online (Sandbox Code Playgroud)
你可以简单地将其重定向为 res.redirect('..?error=1')
该?标签告诉,这是一个可选参数集和浏览器..只是一个相对路径召回(比如调用cd ..终端上向后移动一个目录),你的浏览器将直接与该标签在年底适当的页面:http://.....?error=1
然后你可以通过执行以下操作简单地在适当的页面上拉出错误:
if (req.param("error" == 1)) {
// do stuff bassed off that error match
};
Run Code Online (Sandbox Code Playgroud)
您可以在几个不同的错误值中进行硬编码,并根据发生的错误对其进行适当的响应
请注意,这会使您的网页易于操作,因为用户可以输入自己的参数并让您的页面对其进行响应,因此请确保您采取的操作不是您不希望人们滥用的操作.(对于简单的错误显示应该没问题)
sae*_*eed -17
您应该将页面参数添加到表单中。然后您可以在服务器上读取它并将其用于重定向。
res.redirect(page, {reg_error:'username'}) // page being the url to redirect to.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71531 次 |
| 最近记录: |