Учетная запись для маршрутов pushbtate Backbone.js с экспресс-сервером node.js? - PullRequest
14 голосов
/ 20 января 2012

pushState добавлена ​​поддержка с обновлением Backbone.js версии 0.5.

С магистральная документация :

Обратите внимание, что использование реальных URL-адресов требует от вашего веб-сервера правильно отображать эти страницы, поэтому изменения в Что ж. Например, если у вас есть маршрут / documents / 100, ваш веб сервер должен быть в состоянии обслуживать эту страницу, если браузер посещает этот URL непосредственно. Для полного поиска в поисковых системах лучше всего иметь сервер генерирует полный HTML для страницы ... но если это веб приложение, просто рендеринг того же контента, который вы имели бы для корневой URL, а остальное заполнение Backbone Views и JavaScript отлично работает.

Это может показаться тривиальным вопросом, но мне интересно, может ли кто-нибудь помочь мне с каким-нибудь конкретным (предпочтительно express ) node.js серверным кодом. Как я должен идти об обработке этих маршрутов? Я немного запутался.

Вот соответствующая выдержка из модуля маршрутизатора моего приложения:

var Router = Backbone.Router.extend({
    routes: {
        '': 'index',
        'about': 'about'
    },
    index: function() {
        indexView.render();
    },
    about: function() {
        aboutView.render();
    }
});

var initialize = function() {
    var router = new Router;
    Backbone.history.start({ pushState: true });
}

return {
    initialize: initialize
};

У меня есть только маршрут верхнего уровня и маршрут для страницы about here. Итак, как мне настроить сервер узлов, который позволит мне перейти к:

domain.com
domain.com/about
domain.com/#/about // <- for browsers that don't support pushState

1 Ответ

18 голосов
/ 20 января 2012

Объяснение

Во-первых, вы должны знать, что domain.com/#/about вызовет маршрут '/' вашего сервера, потому что он не читает фрагмент #.Ваш сервер отобразит базу приложения Backbone.js, а Backbone вызовет маршрут about.

Итак, вам нужно объявить два маршрута в Express JS:

  • /
  • / about

Код

app.get('/', function(req, res) {
    // Trigger the routes 'domain.com' and 'domain.com/#/about'
    // Here render the base of your application
});

app.get('/about', function (req, res) {
    // Trigger the route 'domain.com/about'
    // Here use templates to generate the right view and render
});

Я рекомендую вам 3 ссылки для SEO-совместимости с Backbone.js от Derick Bailey:

...