【问题标题】:Express router conflicting with Backbone pushstateExpress 路由器与 Backbone pushstate 冲突
【发布时间】:2014-08-10 20:07:02
【问题描述】:

一个 Express / 路由服务于我的 Backbone 的应用程序 index.html

我在 Backbone 中使用 pushstate,但 Backbone 应该处理的路由正在由 express 处理,并给出 404 响应。

如何设置 Express 以服务于 index.html,但将其他路由委托给 Backbone?

【问题讨论】:

  • 您看过Backbone 样板所使用的解决方案吗? stackoverflow.com/questions/9328513/backbone-js-and-pushstate
  • @WiredPrairie 仅在单击锚点时有效
  • 如果客户端直接访问该路由,您仍然需要执行服务器端路由。即使它只是提供 index.html;服务器必须知道如何处理它。
  • 在非 nodejs 应用程序中,我只是重写了 URL 以在另一种情况下包含 #route。所以,当不是一些特殊的路由(比如 REST API 调用)时,像 /orders/123 这样的 URL 变成了 rootpage.html#orders/123(抱歉,第一次忘记添加那个细节)。

标签: node.js backbone.js express


【解决方案1】:

在这种情况下,您有多种选择:

  1. 您可以让服务器处理与客户端相同的路由并返回相同的结果。这很难实现,但它提供了一个很好的 url。 Github 做到了。

  2. 始终返回 index.html 并处理路由客户端。 (这有点丑陋且难以维护)

  3. 不要使用推送状态。阿门。

【讨论】:

  • 使用node/express,如何完成第二个选项,将所有请求路由回index.html?
  • 您可以在路由中使用正则表达式。因此,假设您想为所有可以使用的 get 请求发送 index.html:app.get("/*", function(){...)})。我个人不喜欢这种方法,因为你不能有任何其他获取请求,但你可以有一个更好的正则表达式并省略一些路由。
  • 或者你可以只使用 res.format - 像你一直在做的那样处理 json 请求,但是 res.redirect html 请求回到根stackoverflow.com/a/8928993/1094784
【解决方案2】:

您可以使用 /* 方法。把它作为最后一条路线。这样其他路由(例如任何服务 API 调用)将在匹配 /* 的全部路由之前匹配。这也是 Backbone 处理其路由的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多