【问题标题】:Redirect with Node Js Not Working Properly使用 Node Js 无法正常工作的重定向
【发布时间】:2017-01-24 00:51:52
【问题描述】:

我是 Node JS 的新手。我将它与快递和护照一起使用。我还通过数据库跟踪当前用户。

目标是让他们无法访问其他数据。如果他们尝试访问其他数据,他们将被重定向到正确的数据页面,并收到来自 connect-flash 的消息提示。

代码如下:

app.get('/data/:dataPlace', isLoggedIn, function(req, res) {
    if (req.user.dataPlace == req.params.dataPlace) {
        res.render('data.ejs', {
            user : req.user,
            message: req.flash('dataDisplayMessage')
        });
    }
    else {
        req.flash('dataDisplayMessage', 'OOOPS!');
        res.redirect('/data/' + req.user.dataPlace);
    }
});

这在大多数情况下都有效(即使使用 chrome 预取数据):

GET /data/asdasd 302 1.049 ms - 86
GET /data/user 200 1.129 ms - 1639 

然而,在极少数情况下我会得到这样的东西:

GET /data/asdasd 302 1.108 ms - 86
GET /data/asdasd 302 1.989 ms - 86
GET /data/user 200 2.769 ms - 1646

第一个 GET 请求是 chrome 预取数据引起的。除了它不像上次那样立即重定向到“用户”,而是挂起直到我按下回车键,然后导致另一个 GET 请求“asdasd”,然后它重定向到“用户”。

这会导致消息显示两次! 那么,我这样做是否正确?为什么会显示两次消息?任何建议将不胜感激!

【问题讨论】:

  • 它在其他浏览器中是否这样做?也许这是一个铬问题?我知道我在使用 Chrome 的预取时遇到了问题 - 并不是真正的问题,但是在您开发时,意外请求可能会在尝试查找问题时造成混乱。
  • @Kryten 我一直在用 safari 尝试它,但似乎无法重现相同的结果......如果没有解决方法,那将是非常可悲的

标签: javascript node.js http redirect


【解决方案1】:

这似乎是 Chrome 的问题。我的临时解决方案是接受第一条错误消息。不过,这只是一种特殊情况,因为在给定时间我只有一条错误消息要显示给用户。 如果您要显示多条错误消息,这并不理想,因为 flash 会在检索到后删除所有消息

在ejs文件中修改了代码:

<% if (error.length > 0) { %>
        <div class="alert alert-danger" role="alert">
            <%= error[0] %>
        </div>
<% } %>

【讨论】:

    猜你喜欢
    • 2017-09-23
    • 2015-08-09
    • 2014-07-01
    • 2015-12-21
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多