Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用node.js express server计算主干.js pushState路由?_Javascript_Node.js_Backbone.js_Express_Pushstate - Fatal编程技术网

Javascript 使用node.js express server计算主干.js pushState路由?

Javascript 使用node.js express server计算主干.js pushState路由?,javascript,node.js,backbone.js,express,pushstate,Javascript,Node.js,Backbone.js,Express,Pushstate,pushState支持是在主干网.js的0.5版更新中引入的 发件人: 请注意,使用真实URL需要您的web服务器能够 正确呈现这些页面,因此需要根据需要进行后端更改 好。例如,如果您的路径为/documents/100,则您的web 如果浏览器访问该URL,服务器必须能够为该页面提供服务 直接的。对于完整的搜索引擎爬行能力,最好有 服务器为页面生成完整的HTML。。。但如果它是一个网络 应用程序,只需呈现与应用程序相同的内容 根URL,并用主干视图和JavaScript填充其余部分 很好 这似

pushState
支持是在主干网.js的0.5版更新中引入的

发件人:

请注意,使用真实URL需要您的web服务器能够 正确呈现这些页面,因此需要根据需要进行后端更改 好。例如,如果您的路径为/documents/100,则您的web 如果浏览器访问该URL,服务器必须能够为该页面提供服务 直接的。对于完整的搜索引擎爬行能力,最好有 服务器为页面生成完整的HTML。。。但如果它是一个网络 应用程序,只需呈现与应用程序相同的内容 根URL,并用主干视图和JavaScript填充其余部分 很好

这似乎是一个微不足道的问题,但我想知道是否有人可以帮助我编写一些特定的(最好是)服务器代码。我应该如何处理这些路线?我有点困惑

以下是我的应用程序路由器模块的相关摘录:

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
domain.com/about
domain.com/#/关于//解释
首先,您需要知道,
domain.com/#/about
将调用服务器的“/”路由,因为它不读取#片段。服务器将呈现Backbone.js应用程序的基础,Backbone将触发“about”路由

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

  • /
  • /关于
代码 我建议您使用Derick Bailey提供的3个链接与Backbone.js进行SEO兼容性:

  • HTML5 PushState的搜索引擎优化和可访问性,第1部分:介绍PushState:
  • HTML5 PushState的搜索引擎优化和可访问性,第2部分:主干网的渐进增强。js:
  • HTML5 PushState的搜索引擎优化和可访问性,第3部分:视频:

非常好的链接,正是我想要的,谢谢。我仍然对整个动态的一个方面感到困惑。因为我为
/about
包含了一个服务器端路由,这难道不意味着我们正在失去散列和hashbang方法给我们带来的好处吗?事实上,我们不必从服务器获取整个响应。我不确定我是否100%正确地理解了这一点。例如,浏览器会将
#/about
的上一个散列片段解释为对
的请求http://domain.com
然后,一旦加载默认文档(例如example.com)的内容,浏览器就会处理哈希片段。例如,只有在新选项卡/窗口中使用哈希片段复制url之后,这种情况才会出现。我不能用英语很好地解释,所以我建议你阅读链接并尝试代码以更好地理解:)哈哈,没问题。谢谢你的澄清!谢谢你的链接,伙计!
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
});