Usando uma técnica semelhante à discutida em Adicionar um URL raiz a todas as solicitações da API Backbone , é muito fácil adicionar um cabeçalho personalizado às Backbone.sync
solicitações sem ter que repeti-lo em cada fetch
/ save
.
Por exemplo, a API de um projeto em que eu estava trabalhando recentemente precisava de um Authorization
cabeçalho, contendo o token de acesso OAuth, enviado com cada solicitação de sincronização. Teria sido razoavelmente trivial reescrever um Backbone.sync
substituto que tratasse disso, mas por que escrever código extra quando Backbone.sync
funciona tão bem?
/*
* Using AMD/RequireJS
*
* The `auth` module handles OAuth and stores the
* access token that needs to be sent in a header
*/
define(['api/auth'], function (auth) {
'use strict';
/*
* Store a version of Backbone.sync to call from the
* modified version we create
*/
var backboneSync = Backbone.sync;
Backbone.sync = function (method, model, options) {
/*
* The jQuery `ajax` method includes a 'headers' option
* which lets you set any headers you like
*/
options.headers = {
/*
* Set the 'Authorization' header and get the access
* token from the `auth` module
*/
'Authorization': 'Bearer ' + auth.getAccessToken()
};
/*
* Call the stored original Backbone.sync method with
* extra headers argument added
*/
backboneSync(method, model, options);
};
});