Server-side Backbone.sync adapter using super agent.


4711.0.06 years ago6 years agoMinified + gzip package size for @wookiehangover/backbone-super-sync in KB


Backbone Super Sync

An isomorphic Backbone.sync adapter using super-agent.


var Backbone = require('backbone');
Backbone.sync = require('backbone-super-sync');

Adding to the Backbone.sync request

Sometimes you need to add to the requests made by Backbone.sync, such as adding an XAPP token. Backbone Super Sync provides the method editRequest to intercept the super-agent request object before the request is made.

NOTE: This is injected into ALL server-side Backbone.sync calls. This behaves signifcantly different than when Backbone is used on the client. For instance you should not use this to add user-specific data to a request like an oauth access token or similar identifier where as on the client you might want to inject that kind of data sync-wide b/c the browser only represents one user.

var Backbone = require('backbone');
var superSync = require('backbone-super-sync');
superSync.editRequest(function(req) {
  req.set({ 'XAPP-TOKEN': 'foobar' });
Backbone.sync = superSync;

The arguments of Backbone.sync are also passed to editRequest in case you need to globally adjust the request based off options or otherwise.

superSync.editRequest(function(req, method, model, options) {
  req.set({ 'X-ACCESS-TOKEN': options.user.get('access_token') });

Built-in request caching

At Artsy we naively cache our server-side Backbone.sync requests. You can configure Backbone Super Sync to do this by setting superSync.cacheClient = client. If the cache: true option is set in a model.fetch, Backbone Super Sync will use the cacheClient to cache GET requests. The client API is based off of node-redis but you could easily leverage this API to roll your own caching mechanism.


memoryCache = {}
superSync.cacheClient = {
  set: function(key, val, callback) {
    memoryCache[key] = val;
    callback(null, 'OK');
  get: function(key, callback) {
    callback(null, memoryCache[key]);
  expire: function(key, expiresIn, callback) {
    setTimeout(expiresIn / 1000, function() {
      memoryCache[key] = null;
      callback(null, 1);
// Cache expiry time. Uses seconds. Defaults to 3600 or 1 hour. You may
// also pass `cacheTime: Number` in the options of a fetch to set per-request.
superSync.defaultCacheTime = 60;

new Backbone.Model({ id: 'cach-me' }).fetch({
  cache: true,
  success: function() {}

Use at your own risk—remember there are only two hard things.


Please fork the project and submit a pull request with tests. Install node modules npm install and run tests with npm test



If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.