pushState Backbone.js的0.5版更新引入了对该功能的支持。
pushState
从主干文档:
请注意,使用真实URL要求您的Web服务器能够正确呈现这些页面,因此也需要进行后端更改。例如,如果您的路由为/ documents / 100,并且浏览器直接访问该URL,则您的Web服务器必须能够提供该页面。为了获得完整的搜索引擎可爬网性,最好让服务器为页面生成完整的HTML …但是,如果是Web应用程序,则只需呈现与根URL相同的内容,然后用Backbone填充其余内容视图和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 };
在这里,我只有一条顶级路线和一个关于页面的路线。因此,我应该如何设置一个节点服务器,使我可以导航到:
domain.com domain.com/about domain.com/#/about // <- for browsers that don't support pushState
首先,您需要知道domain.com/#/about它将调用服务器的“ /”路由,因为它不读取#片段。您的服务器将呈现Backbone.js应用程序的基础,而Backbone将触发“关于”路线。
domain.com/#/about
因此,您需要在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与Backbone.js实现SEO兼容性的3个链接: