【问题标题】:Backbone.js with express.js - sync using only POST and GETBackbone.js 与 express.js - 仅使用 POST 和 GET 同步
【发布时间】:2012-11-18 23:51:08
【问题描述】:

我的应用是客户端的 Backbone.js,后端的 Express.js。

我在使用主干模型和集合(他们使用 urlRoot:"/users")与我的 API 的所有部分同步时遇到问题。 我只能使用 GET 或 POST,不能使用 PUT 或 DELETE。 *我不能使用更多的模型* 不允许使用 jQuery ajax

我的 API

添加新用户: 我需要使用新数据的 JSON 向 /users 进行 POST。所以我做得很好 - this.model.save({new data...})

列出所有用户: 我的 API,对 GET /users 的响应,使用正确的处理程序 - 所以,this.collection.fetch() - 工作正常。

登录: 我的 API 为此接受 POST 到 /users/login。如何向我的模型添加一个函数“logIn”,它将使用自定义同步/传递 options.url 来同步 - 或任何其他方式 - 将 POST 到 /users/login ?

退出: API 接受 POST 到 /users/logout - 如何使用我的骨干模型发送此请求?

用户 ID: GET /users/:id 的同样问题

更新用户: POST /users/:id - 又是同样的问题。

--- 所以实际上,简而言之就是---

什么是最好的方法(或最“正确”的方法),实现骨干模型的方法,类似于“model.save()” - 但只是 POST/GET 到有点不同的路径然后是 urlRoot ?

【问题讨论】:

    标签: javascript ajax node.js backbone.js express


    【解决方案1】:

    您可能在这里有几个选择。一种是以支持您想要的网址的方式构建您的模型。例如,有一个User 模型和一个Session 模型分别处理更新用户和管理登录状态。

    您可能应该做的另一件事是在您的模型中使用url 方法。

    在您的 User 模型中有这样的东西。 (注意:这里使用urlRoot 而不是url 是相同的,但对于url 中需要的任何更复杂的东西,这是正确的方法)

    url : function() {
      var base = "/users/";
      if(this.isNew()) {
        return base;
      } else {
        return base + this.get("id");
      }
    }
    

    您可以将同样的概念扩展到您的 Session 模型中,以根据 Session 是否新来处理注销与登录。

    更新:

    如果您必须使用相同的模型,最好的办法是完全绕过 Backbone.sync 方法,并使用知道如何清理的成功/错误处理程序编写自定义 AJAX 调用。

    login : function() {
      $.post("/users/login", {success: function (response) {
          // Update user as needed
        }, error: function (xhr, response) {
          // Handle errors
        }
      }
    }
    

    【讨论】:

    • 谢谢。我不允许使用更多模型,所有逻辑都应该在用户模型/集合中。关于第二个选项 - 但是我怎样才能发布到 /users/login ...?
    • 我不明白为什么不允许您使用更多模型。如果您想在 Backbone 的结构中工作,那么这是正确的方法。从根本上说,您应该将 Session 视为与用户分开的对象。
    • 如果你真的想这样做,那么你应该完全独立于 Backbone 模型来处理 AJAX。
    • 原因 - 我的老板。他也不允许我使用 jQuery ajax。他希望我为用户模型制作自定义 SYNC,并使用使用此 SYNC 的方法。
    • 好的。是的,您可以根据需要重写Backbone.sync(尽管这没有多大意义,因为您试图覆盖它所做的大部分工作,只使用下面的纯AJAX)。这里使用Backbone.sync的正确方法是按照我原来说的,创建一个单独的Session模型。
    猜你喜欢
    • 1970-01-01
    • 2012-05-18
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 2017-04-06
    相关资源
    最近更新 更多