>有一个休息api,期望每个请求一个令牌
>执行auth的Nginx后端服务于/ api下的api的骨干应用程序代理请求
>我是一个新的javascript骨干:/
骨干应用程序实际上从cookie读取令牌,每次骨干拨打电话时,我需要将其附加到请求URL.我看到这可以通过覆盖骨干同步来完成.但是在几件不同的事情中我烦恼了我.喜欢,这就是我所做的
console.log('overriding backbone sync'); var key ="token"; Backbone.old_sync = Backbone.sync Backbone.sync = function(method,model,options) { if (method === 'read') { if (!(model.url.indexOf('?key=') != -1)) { model.url = model.url + '?key=' + key; } } else { old_url = model.url(); if (!(old_url.indexOf('?key=') != -1)) { model.url = function() { return old_url + '?key=' + key; } } } Backbone.old_sync(method,options); };
当它不是“读取”方法时,model.url正在返回一个函数,并且不知道如何处理它,另一个问题是当连续请求被创建时,令牌被添加两次.我试图删除它与该indexOf东西没有运气.
有没有更好的方法来做到这一点?
解决方法
var globalKey = 'key123'; var urlWithKey = function(url,key) { return function() { return url + "?key=" + key; }; }; var MyModel = Backbone.Model.extend({ url: urlWithKey('/my/url/',globalKey) });
如果您现在创建一个对象并保存它,则发送对我的/ url /?key = key123的POST请求.
我想你也可以覆盖url方法,如果这是您所需要的所有骨干模型的行为.
一般注意事项:在Backbone大多数参数中,如url可以是一个函数或一个值.我不知道为什么在你的例子中,它是一个函数,另一个是一个值,但如果你覆盖一些内部函数,你总是必须能够处理这两种方法.如果你看看Backbone的源代码,你会看到他们使用getValue来访问这些参数:
var getValue = function(object,prop) { if (!(object && object[prop])) return null; return _.isFunction(object[prop]) ? object[prop]() : object[prop]; };
更新:重载所有型号的url方法可以这样工作:
var globalKey = 'key123'; (function() { var baseUrl = Backbone.Model.prototype.url; Backbone.Model.prototype.url = function() { return this.baseUrl + "?key=" + globalKey; }; })() var MyModel = Backbone.Model.extend({ baseUrl: '/my/url/' });
你也可以按常规离开Backbone.Model,并创建自己的基类.详见http://documentcloud.github.com/backbone/#Model-extend.
原文地址:https://www.jb51.cc/js/152287.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。