@wookiehangover/backbone-super-sync

Server-side Backbone.sync adapter using super agent.

Stats

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

Readme

Backbone Super Sync

An isomorphic Backbone.sync adapter using super-agent.

Example

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.

e.g.

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.

Contributing

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

License

MIT

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.