2015-09-25 44 views
0

在我的一個節點文件中,我有一個函數爲每個頁面執行(簡單的登錄實現)。在下面的代碼中,聊天欄只會顯示特定的路線。我的流量是這樣的:EJS和節點沒有正確加載模板,res.render

- 客戶登錄...點擊'/',並運行以下功能。 showChatBar = false。 - 立即將頁面重定向到「/ chat」路由。 showChatBar = true。這應該現在顯示聊天欄。但事實並非如此。

我的想法是...這發生得太快了,showChatBar = true,永遠不會加載。也許是異步問題?也許與res.render的東西?

這裏是我的Node.js代碼

exports.login = function (req, res) { 
var showChatBar = false, navButton = '', navTitle='',navSubTitle=''; 

if(typeof req.url !='undefined'){ 
    if(req.url.indexOf('chat')!=-1){ 
     //Consumer View 
     showChatBar = true; 
     navButton = "close"; 
    } 

    if(req.url.indexOf('agent')!=-1){ 
     //Agent View 
     navButton = "close"; 
     navTitle='My Clients'; 
    } 
} 

if(typeof req.headers.referer != 'undefined'){ 
    if(req.headers.referer.indexOf('agent')!=-1){ 
     //Agent Chat View 
     navButton = "back"; 
    } 
} 

res.render('index', {title: 'Express', showChatBar: showChatBar, navButton:navButton, navTitle:navTitle,navSubTitle:navSubTitle}); 

};

這裏是EJS部分:爲什麼這不是showChatBar =真正確更新模板

<script> 
    var chatBar =<%= showChatBar %>, navButton='<%= navButton %>', navTitle='<%= navTitle %>',navSubTitle='<%= navSubTitle %>'; 
</script> 

的思考?

回答

0

嘗試使用req.originalUrl代替req.url

下面是一些關於它的資料:

req.originalUrl

req.url是不是原生高速特性,它是從節點的HTTP模塊繼承,

This pro perty很像req.url;但是,它保留了原始的請求URL,允許您爲了內部路由目的而自由地重寫req.url。例如,app.use()的「掛載」功能將重寫req.url以刪除掛載點。

// GET /search?q=something req.originalUrl // => "https://stackoverflow.com/search?q=something"

+0

嗯...似乎沒有修復它。但是謝謝! –

+0

看來,重新路由發生時,它不想再次重新加載index.js ...只保留第一個showChatBar值... –