2017-01-24 90 views
1

我是Node NodeJ新手。我使用快递和护照。我也跟踪数据​​库中的当前用户。重定向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); 
    } 
}); 

这工作的大部分时间(即使使用铬预取数据):

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请求被引起通过铬预取数据。除了像前一次直接重定向到'用户'之外,它会挂起,直到我按下回车键,然后导致另一个'asdasd'GET请求,然后重定向到'user'。

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

+0

是否做到这一点在其他浏览器?也许这是一个铬合金问题?我知道我的Chrome预取存在问题 - 并非真正的问题,但是当您开发时,意外的请求会在尝试查找问题时造成混淆。 – Kryten

+0

@Kryten我一直在用Safari浏览器尝试它,看起来似乎无法重现相同的结果......如果没有解决方法,这将会非常难过 – Zack

回答

0

看来这是一个Chrome问题。我的临时解决方案是接受第一条错误消息。这只是只有一个特殊情况,因为我只有一个错误消息在给定的时间显示给用户。 这不会是理想的,如果你有多个错误信息显示,闪存删除检索一次

的代码在EJS文件被修改的所有消息:

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