【问题标题】:Setting up default route with Express.js and Backbone.js使用 Express.js 和 Backbone.js 设置默认路由
【发布时间】:2012-02-06 20:16:13
【问题描述】:

我正在使用 Express 和 Backbone.js 构建一个网站。我想尽可能多地处理前端。

我感到困惑的一件事是,如何将路由请求推迟到 Backbone 而不是 Express。我知道 Backbone 现在可以处理诸如“/this/here”之类的路由,但当然 Express 会首先解释它。

将它交给 Backbone 的最佳方式是什么?我应该在 Express 中创建一个全局路由来处理我没有明确定义的所有内容吗?

【问题讨论】:

    标签: backbone.js express


    【解决方案1】:

    不确定为什么第一个答案被接受,但这是不正确的。有两种方法可以处理。

    1. 用户可以在您的节点快速路线中获取所有信息

      app.get "*", (req, res) ->
        res.render "index"
      
    2. 在你的节点快速路由中使用 catch all

      app.use (req, res) ->
        res.render "index"
      

    其中任何一个都应该位于所有路由的末尾,以便页面或 API 端点的任何其他 get 仍然会被调用。然后,您的客户端 MVC 路由器将转到正确的页面。

    【讨论】:

      【解决方案2】:

      诀窍是您的应用程序需要知道在客户端(例如使用 Backbone)和服务器端(例如使用 node.js/Express.js)拦截哪些路由。这是通过在 URL 中为应该被 Backbone 捕获的链接使用哈希 ('#') 来完成的。不包含哈希的 URL 将被发送到服务器。

      以下是如何将路由添加到 Backbone 路由器对象的示例。我还添加了一个默认路由 ('*path'),它允许 Backbone 捕获客户端上的任何其他路径。请注意,此默认设置仅适用于包含哈希 ('#') 的 URL:

      // Configure router.
      var AppRouter = Backbone.Router.extend({
        routes: {
          'contact/add': 'addContact',
          '*path': 'defaultPage'
        },
        addContact: function() {
          $content.html('Add');
        },
        defaultPage: function(path) {
          $content.html('Default');
        },
      });
      
      // Initialize router.
      var appRouter = new AppRouter();
      Backbone.history.start(); 
      

      相应的html链接会写成:

      <a href='/#contact/add'>Add</a> 
      

      【讨论】:

        【解决方案3】:

        我可能完全弄错了,但是 express 是一个服务器端框架,而主干是一个客户端框架。
        在分析传入请求和传递资源的意义上,只有服务器端框架负责路由。

        我认为,您所指的是 resource routing(来自 ruby​​ on rails 世界)在 express 中的支持,也就是说,您的应用程序中的每个资源都可以在一个安静的 url 上使用,例如/posts.

        您可以 GET、POST、PUT、DELETE 此资源,框架将这些类型分派到正确的业务逻辑。

        backbone.js 中的路由(据我了解)是纯客户端路由,可让您在构建成熟的 ajax 应用程序时拥有有效的浏览器历史记录。

        我希望这两个东西虽然名称相同,但并不完全相同。

        【讨论】:

        • 在下面查看我的答案。您可以使用 app.get "*" 或 app.use 来传递请求,以便客户端路由器可以做它的事情。
        猜你喜欢
        • 2014-05-05
        • 2021-07-30
        • 1970-01-01
        • 1970-01-01
        • 2018-01-14
        • 2021-01-19
        • 1970-01-01
        • 1970-01-01
        • 2019-03-30
        相关资源
        最近更新 更多