42

我网站的每个页面上都有一个注册表单。在注册过程中可能会出现一些错误。发现错误后,我必须将用户返回到上一页,显示一些错误消息。问题是我不知道用户是从哪个页面进行注册的,所以我使用res.redirect('back');. 但是,我不能只是将用户重定向回来,我还必须显示错误消息,所以我必须传递一些参数。但res.redirect('back', (reg_error:'username')})不能直接使用,因为res.redirect()不支持参数。如何使用某些参数呈现上一页?

4

7 回答 7

46

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

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

backURL如果您需要它在多个路由中持久存在,您可能还希望存储在 req.session 中。请记住测试该变量是否存在,例如:res.redirect(req.session.backURL || '/')


编辑:由于我的回答得到了一些支持,我输入了我目前的方法来做到这一点。它有点长,所以你可以在https://gist.github.com/therealplato/7997908查看它。

最重要的区别是在查询字符串中使用显式的“bounce”参数来覆盖Referer url。

于 2012-09-16T01:47:16.317 回答
31

实现这一点的一个非常简单的方法是使用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());
});

然后像这样使用它:

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') });
});
于 2012-10-28T05:21:35.853 回答
5

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

于 2012-09-16T02:35:44.283 回答
5

您可以简单地将其重定向为res.redirect('..?error=1')

?标签告诉浏览器它是一组可选参数,..它只是一个路径名相对调用(例如cd ..在终端上调用以移回一个目录),您的浏览器将定向到最后带有该标签的相应页面:http://.....?error=1

然后您可以通过执行以下操作简单地在相应页面上拉出错误:

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

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

请注意,这会使您的网页容易受到操纵,因为用户可以输入他们自己的参数并让您的页面响应它,因此请确保您采取的操作不是您不希望人们滥用的操作。(对于简单的错误显示应该没问题)

于 2013-11-14T09:22:54.863 回答
1

在处理请求之前使用中间件,并将成功和错误变量与 res 对象一起放置。

参考以下:-

// set local variables middleware
    app.use(function(req, res, next) {
         res.locals.currentUser = req.user;
           // set success flash message
           res.locals.success = req.session.success || '';
              delete req.session.success;
               // set error flash message
               res.locals.error = req.session.error || '';
            delete req.session.error;
           // continue on to next function in middleware chain
              next();
             });

在遇到错误时,使用另一个中间件来处理错误并使用 req 对象添加错误。

app.use(function(err, req, res, next) {

       console.log(err);
       req.session.error = err.message;
            res.redirect('back');
       });

这将重定向到上一页以及 res 对象中的错误消息

于 2020-08-23T05:37:54.327 回答
0

您可以使用 connect-flash 包发送错误或成功消息。

https://www.npmjs.com/package/connect-flash

于 2020-03-04T15:53:26.523 回答
-17

您应该将页面参数添加到表单。然后您可以在服务器上读取它并将其用于重定向。

res.redirect(page, {reg_error:'username'}) // page being the url to redirect to.
于 2012-09-15T23:54:46.740 回答