EJS和节点没有正确加载模板,res.render

时间:2015-09-25 22:50:11

标签: javascript node.js ejs

在我的一个节点文件中,我有一个为每个页面执行的函数(简单的登录实现)。在下面的代码中,聊天栏只会显示特定路线。我的页面流程如下:

-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正确更新模板的想法?

1 个答案:

答案 0 :(得分:0)

尝试使用req.originalUrl代替req.url

以下是一些关于它的文档:

  

req.originalUrl

     

req.url不是本机Express属性,它继承自Node的http模块。

     

此属性与req.url非常相似;但是,它保留了原始请求URL,允许您自由重写req.url以进行内部路由。例如,app.use()的“挂载”功能将重写req.url以剥离挂载点。

     

// GET /search?q=something req.originalUrl // => "/search?q=something"