EJS и узел неправильно загружают шаблон, res.render

В одном из моих узловых файлов у меня есть функция, выполняемая для каждой страницы (простая реализация входа в систему). В приведенном ниже коде панель чата будет отображаться только для определенного маршрута. Мой поток для страницы таков:

-Клиент входит в систему... нажимает '/' и запускает приведенную ниже функцию. показатьчатбар = ложь. -сразу же страница перенаправляется на маршрут «/chat». показатьчатбар = истина. Теперь должна отображаться панель чата. Однако это не так.

Я думаю, что... это происходит так быстро, что showChatBar=true никогда не загружается. Может проблема с асинхронностью? Может что-то с рес.рендером?

вот мой код 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?


person s_dev    schedule 25.09.2015    source источник


Ответы (1)


Попробуйте использовать req.originalUrl вместо req.url

Вот некоторые документы об этом:

req.originalUrl

req.url не является собственным свойством Express, оно унаследовано от http-модуля Node.

Это свойство очень похоже на req.url; однако он сохраняет исходный URL-адрес запроса, что позволяет свободно переписывать req.url для целей внутренней маршрутизации. Например, функция «монтирования» в app.use() перепишет req.url, чтобы удалить точку монтирования.

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

person Gökay Gürcan    schedule 25.09.2015
comment
Похоже, что когда происходит перенаправление, он не хочет снова перезагружать index.js... сохраняя только первое значение showChatBar... - person s_dev; 26.09.2015