# backbone.io
**Repository Path**: mirrors_iliakan/backbone.io
## Basic Information
- **Project Name**: backbone.io
- **Description**: Backbone.js sync via Socket.IO
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-09-25
- **Last Updated**: 2026-10-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Backbone.IO
===========
Backend-agnostic Backbone.js sync override and server notifications via Socket.IO.
Install
-------
npm install backbone.io
Usage
-----
On the server:
var http = require('http');
var backboneio = require('backbone.io');
var app = http.createServer();
app.listen(3000);
var backend = backboneio.createBackend();
backend.use(backboneio.middleware.memoryStore());
backboneio.listen(app, { mybackend: backend });
On the client:
Models in `MyCollection` will now be synced to `mybackend`.
Events
------
When a model is synced with a particular backend, the backend will trigger events
on collections (across multiple clients) that share the backend. For example, we
could keep collections synced in realtime with the following event bindings:
var MyCollection = Backbone.Collection.extend({
backend: 'mybackend',
initialize: function() {
var self = this;
this.bind('backend:create', function(model) {
self.add(model);
});
this.bind('backend:update', function(model) {
self.get(model.id).set(model);
});
this.bind('backend:delete', function(model) {
self.remove(model.id);
});
}
});
Or use the provided shortcut:
backend: 'mybackend',
initialize: function() {
this.bindBackend();
}
In addition to `backend:create`, `backend:read`, `backend:update`, and `backend:delete`
events, a generic `backend` event is also triggered when a model is synced.
this.bind('backend', function(method, model) {
// Method will be one of create, read, update, or delete
});
The event prefix `backend` is used by default but this can be customized by setting the
event name on the server.
backboneio.listen(app, { mybackend: backend }, { event: 'myevent' });
Backends and Middleware
-----------------------
Backends are stacks of composable middleware (inspired by Connect) that are responsible
for handling sync requests and responding appropriately. Each middleware is a function
that accepts request and response objects (and optionally a function that can be called
to continue down the stack). A middleware will generally either return a result by
calling `end` on the response object or pass control downward. For example, let's add a
logger middleware to our backend:
var backend = backboneio.createBackend();
backend.use(function(req, res, next) {
console.log(req.backend);
console.log(req.method);
console.log(JSON.stringify(req.model));
next();
});
backend.use(backboneio.middleware.memoryStore());
A request object will contain the following components (in addition to those set by
various middleware):
* `method`: the sync method (`create`, `read`, `update`, or `delete`)
* `model`: the model object to by synced
* `options`: any options set by the client (except success and error callbacks)
* `backend`: name of the backend responsible for handling the request
* `socket`: the client socket that initiated the request
Middleware can also be applied to only particular types of requests by passing the desired
contexts to `use`:
backend.use('create', 'update', 'delete', function(req, res, next) {
if (isAuthorized(req)) {
next();
} else {
next(new Error('Unauthorized'));
}
});
Or alternatively by using one of the four helper methods (`create`, `read`, `update`, `delete`):
backend.read(function(req, res) {
if (req.model.id) {
req.end(mymodels[req.model.id]);
} else {
req.end(mymodels);
}
});
If the bottom of the middleware stack is reached before a result is returned then the requested
model is returned by default: `res.end(req.model)`. Look in the `middleware` directory for more
examples.
Clients are automatically notified of events triggered by other clients, however, there may
be cases where other server-side code needs to make updates to a model outside of a backend
handler. In such a case, one can notify clients by emitting events directly on the backend.
For example:
var backend = backboneio.createBackend();
backend.use(backboneio.middleware.memoryStore());
// Clients will receive 'backend:create', 'backend:update',
// and 'backend:delete' events respectively.
backend.emit('created', { id: 'myid', foo: 'bar' });
backend.emit('updated', { id: 'myid', foo: 'baz' });
backend.emit('deleted', { id: 'myid' });
Channels
--------
To synchronize models between a subset of all clients sharing a single backend, you can
specify a channel.
var MyCollection = Backbone.Collection.extend({
backend: { name: 'mybackend', channel: 'mychannel' }
});
Only clients sharing the same channel will receive updates from each other. The channel
associated with a given request is available from any middleware in `req.channel`.
Customizing
-----------
In addition to middleware, the behavior of Backbone.IO can be customized via standard Socket.IO
mechanisms. The object returned from the call to `listen` is the Socket.IO object and can be
manipulated further. See http://socket.io for more details.
Tests
-----
Install development dependencies:
npm install
Run the test suite:
make test