在我的一个节点文件中,我有一个为每个页面执行的函数(简单的登录实现)。在下面的代码中,聊天栏只会显示特定路线。我的页面流程如下:
-Client登录...命中'/',并运行以下功能。 showChatBar = 假。 - 然后页面重定向到'/ 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部分:
<script>
var chatBar =<%= showChatBar %>, navButton='<%= navButton %>', navTitle='<%= navTitle %>',navSubTitle='<%= navSubTitle %>';
</script>
关于为什么没有使用showChatBar = true正确更新模板的想法?
答案 0 :(得分:0)
尝试使用req.originalUrl
代替req.url
以下是一些关于它的文档:
req.url
不是本机Express属性,它继承自Node的http模块。此属性与
req.url
非常相似;但是,它保留了原始请求URL,允许您自由重写req.url以进行内部路由。例如,app.use()的“挂载”功能将重写req.url
以剥离挂载点。
// GET /search?q=something req.originalUrl // => "/search?q=something"