使用node.js表示服务器的Backbone.js pushState路由的帐户?

时间:2012-01-20 04:21:19

标签: javascript node.js backbone.js express pushstate

Backbone.js版本0.5更新中引入了

pushState支持。

来自the backbone documentation

  

请注意,使用真实网址需要您的网络服务器能够   正确呈现这些页面,因此需要进行后端更改   好。例如,如果您的路线为/ documents / 100,则表示您的网站   如果浏览器访问该URL,则服务器必须能够提供该页面   直。对于完整的搜索引擎可抓取性,最好有   服务器生成页面的完整HTML ...但如果它是一个Web   应用程序,只是呈现您将拥有的相同内容   根URL,并使用Backbone Views和JavaScript填充其余部分   工作正常。

这可能看起来像一个微不足道的问题,但我想知道是否有人可以帮助我使用某些特定的(expressnode.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
};

我这里只有一个顶级路线和一个关于页面的路线。那么我应该如何设置一个允许我导航到的节点服务器:

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

1 个答案:

答案 0 :(得分:18)

说明

首先,您需要知道domain.com/#/about将调用服务器的'/'路由,因为它不会读取#片段。您的服务器将呈现Backbone.js应用程序的基础,Backbone将触发“关于”路由。

因此,您需要在Express JS中声明两个路由:

  • /
  • /约

代码

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
});

我建议你使用Derick Bailey的3个链接与Backbone.js进行SEO兼容: