Javascript 单页应用程序的版本控制和路由? 背景

Javascript 单页应用程序的版本控制和路由? 背景,javascript,node.js,backbone.js,Javascript,Node.js,Backbone.js,我正在开发一个教育性的JavaScript应用程序/站点(SPA),它最终将有1000个动态URL,我想让这些URL成为可爬行的 我现在正在研究如何实现版本控制、路由和seo(以及i18n) 我的总体想法是使用hashbang,并提供以下资源: example.com/#!/v1?page=story1&country=denmark&year=1950 此处的“page”参数决定需要加载哪些控制器/视图,后续参数可以指示控制器加载相应的内容 然后,只需替换url的“v1”部

我正在开发一个教育性的JavaScript应用程序/站点(SPA),它最终将有1000个动态URL,我想让这些URL成为可爬行的


我现在正在研究如何实现版本控制、路由和seo(以及i18n)
我的总体想法是使用hashbang,并提供以下资源:

example.com/#!/v1?page=story1&country=denmark&year=1950
此处的“page”参数决定需要加载哪些控制器/视图,后续参数可以指示控制器加载相应的内容

然后,只需替换url的“v1”部分即可处理参数的版本控制,并且每个版本都有一个特定的路由处理程序映射不推荐的参数

SEO将通过node.js或其他后端提供内容的“转义片段”版本来改进

i18n也应该由node.js处理吗?这样,传递给爬虫的内容就已经被翻译了

  • 这是使单页应用程序版本化和可爬行的可行方法吗
  • 我现在正在使用Backbone.js,您会在混合中添加什么来帮助解决上述问题

  • 为了回答第一个问题,要求所有“页面”都有一个唯一的URL,并且可以在没有JavaScript的情况下找到和查看

    你必须制作一个robots.txt,列出你所有的唯一URL,或者在某个地方有一个站点地图,这样爬虫就可以找到所有URL

    我不确定在这种情况下你所说的SEO到底是什么意思。看起来你是在建议给爬虫提供不同于浏览器的内容。通常不是一个好主意,除非你的网站是如此动态,没有其他办法。

    1)绝对不是。(好吧,它可以工作,但用hashbang从头开始设计你的应用程序是个坏主意)

    2) node.js和主干是一个很好的组合。就我个人而言,我喜欢express在服务器上进行路由/模板设置

    --反对hashbang的理由:网络上有太多好的信息,我会听从他们的

    在这里:

    在这里:

    还有这个很棒的图书馆:

    以及该库中的此wiki页面:

    而不是使用该库检查此chrome扩展,该扩展将导致ajax StackOverflow(或任何其他具有正常URL的站点):

    15个参数是绝对必要的吗?将内容参数(页面、国家)放在url中,将表示(即:sortby=author)放在查询字符串中

    对于“您仍然被哈希标记序列化所困扰”,我给出以下回答:

    每个路由都应指向有效的资源位置。ie:/v1/page/denmark/some slug for post应该是一个资源位置,当您将其更改为新的post/page时,它也应该是一个资源位置。我想说的是,如果不能使用url为页面添加书签,那么实现就会被破坏

    另外,您是否计划断开每个版本的所有链接?我不知道为什么要在url中包含该版本


    我希望这能有所帮助。

    有什么具体的理由使用hashbang而不是HTML5历史API吗?@Kos:使用HTML5历史API有什么好处?我认为键值方法已经足够清楚了,我不必为漂亮的URL设置任何服务器重定向?请给出一个使用上述URL的例子,我可能会明白你的观点。Thank.history api可以是:example.com/v1/story/denmark/1950我知道expressjs(构建在节点上)可以通过app.get('/v1/:page/:country/:year')处理此路由,并且您可以访问路由中的page/country/year变量。Thank@ChrisBiscardi。然而,跟踪这些参数的顺序似乎很复杂——但也许我遗漏了什么?如果我有15个参数,并且我想在升级应用程序版本时更改其中的一些参数,该怎么办?历史API仍然是正确的解决方案,还是我应该坚持顺序独立的键值对?也许我的意思是本文所描述的:-“我仍然坚持哈希标记序列化”,即使我将历史API用于主状态页。问题是我的主要状态(“页面”)和次要状态(“散列”)应该具有相同的权重,即它们编码的内容对爬虫程序同样重要。那么,为什么不跳过fab History API,对所有参数使用一个好的hashbang呢@克里斯比斯卡迪:请试着说服我:谢谢@Hogan。正如您所知,对于一个非常动态的SPA,不使用JavaScript查看站点并不总是一个选项。因此,我剩下的选项可能是1)使用node.js在服务器端渲染更多内容(包括执行i18n),从而能够显示用户和爬虫相同的内容。2) 要使用此处所述的特殊hashbang管道:@dani-这正是node.js流行的原因-它提供了一个单代码解决方案-即-当crawler请求您在发送之前运行js时,当浏览器请求您发送js代码并让本地机器完成工作时,History.js对于使用旧浏览器的用户来说有一个相当严重的SEO问题。像这样的链接会将错误的内容返回到搜索引擎,并遭受与hashbang相同的问题。我绝对不推荐这是一个神奇的解决方案。我没有说这是一个神奇的解决方案,你仍然需要设置你的所有内容,以便从URL访问。在演示中,你会注意到初始状态总是一个空对象。