Javascript Backbone.js与express.js-仅使用POST和GET同步
我的应用程序客户端是Backbone.js,后端是Express.js 我在使用主干模型和集合(它们使用urlRoot:“/users”)与API的所有部分同步时遇到问题。 我只能使用GET或POST,不能使用PUT或DELETE。 *我不允许使用更多的型号* 不允许使用jQuery ajax 我的API 添加新用户: 我需要向/users发布新数据的JSON。所以我在-Javascript Backbone.js与express.js-仅使用POST和GET同步,javascript,ajax,node.js,backbone.js,express,Javascript,Ajax,Node.js,Backbone.js,Express,我的应用程序客户端是Backbone.js,后端是Express.js 我在使用主干模型和集合(它们使用urlRoot:“/users”)与API的所有部分同步时遇到问题。 我只能使用GET或POST,不能使用PUT或DELETE。 *我不允许使用更多的型号* 不允许使用jQuery ajax 我的API 添加新用户: 我需要向/users发布新数据的JSON。所以我在-this.model.save({newdata…})上做得很好 列出所有用户: 为此,我的API使用正确的处理程序响应GET
this.model.save({newdata…})上做得很好
列出所有用户:
为此,我的API使用正确的处理程序响应GET/users,因此,this.collection.fetch()
登录:
我的API为此接受POST to/users/login。如何向我的模型中添加一个函数“logIn”,该函数将使用自定义sync/pass options.url进行同步,或者以任何其他方式发布到/users/logIn
注销:
API接受POST to/users/logout-如何使用我的主干模型发送此请求
用户ID:
对于GET/users/:id,这里有相同的问题
更新用户:
POST/users/:id-再次问相同的问题
——所以实际上,简而言之,问题是--
实现主干模型方法的最佳方式(或最“正确”)是什么,类似于“model.save()”——但只需发布/获取与urlRoot稍有不同的路径即可?您可能有两种选择。一种是以支持所需URL的方式构建模型。例如,有一个用户
模型和一个会话
模型,分别处理更新用户和管理登录状态
您可能应该做的另一件事是在模型中使用url
方法
在您的用户
模型中类似于此。(注意:此处使用urlRoot
而不是url
是相同的,但对于url中需要的任何更复杂的内容,这是正确的方法)
您可以根据会话
是否为新会话,将此概念扩展到会话
模型中,以处理注销与登录
更新:
如果必须使用相同的模型,最好完全绕过Backbone.sync
方法,编写一个带有成功/错误处理程序的自定义AJAX调用,这些处理程序知道如何清理问题
login : function() {
$.post("/users/login", {success: function (response) {
// Update user as needed
}, error: function (xhr, response) {
// Handle errors
}
}
}
谢谢我不允许使用更多的模型,所有的逻辑都应该在用户模型/集合中。关于第二个选项-那么我如何发布到/users/login?我不明白为什么不允许你使用更多的型号。如果您想在主干结构中工作,那么这是正确的方法。基本上,您应该将会话视为一个独立于用户的对象。如果您真的想这样做,那么您应该完全独立于主干模型来处理AJAX。原因-我的老板。他也不允许我使用jQueryAjax。他希望我为用户模型进行自定义同步,并使用使用此同步的方法。Ok。是的,如果您愿意,您可以重写Backbone.sync
(尽管这没有多大意义,因为您正试图覆盖它所做的大部分工作,而只是在下面使用纯AJAX)。这里使用Backbone.sync
的正确方法是按照我最初说的做,并创建一个单独的会话
模型。
login : function() {
$.post("/users/login", {success: function (response) {
// Update user as needed
}, error: function (xhr, response) {
// Handle errors
}
}
}