节点J重定向无法正常工作

时间:2017-01-24 00:51:53

标签: javascript node.js http redirect

我是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'然后它重定向到用户'。

这会导致邮件显示两次! enter image description here 那么,我这样做是正确的吗?为什么要两次显示消息?任何建议将不胜感激!

1 个答案:

答案 0 :(得分:0)

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

代码在ejs文件中被修改:

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