sharify

Easily share data between modules meant to run on the server and client using browserify.

sharify

Easily share data between Browserify modules meant to run on the server and client.

The following example shares a Backbone Model between the server and browser. However, this could be applied to any module shared server/client.

var sharify = require('sharify');
sharify.data = {
  API_URL: 'http://artsy.net/api/v1',
  NODE_ENV: process.env.NODE_ENV
};
app.use(sharify);
var Backbone = require('backbone'),
    API_URL = require('sharify').data.API_URL;
 
var Artwork = module.exports = Backbone.Model.extend({
  urlRoot: API_URL + '/artwork/'
};
html
  body
    //- Adds `sharify.data` and a convenient `sd` short hand to locals
    if sharify.data.NODE_ENV == 'development'
      #debug-modal
    #scripts
      //- Make sure this is above your other scripts
      != sharify.script()
      script( src='/bundle.js' )

NOTE: Sharify will safely expose the sharify.data and sd globals to the client-side for the convenience of sharing templates server/client.

// server.js 
var Artwork = require('../models/artwork');
 
app.get('/artwork/:id', function(reqres) {
  new Artwork({ id: req.params.id }).fetch(//...); 
});
// client.js 
var Artwork = require('../models/artwork'),
    View = require('view.js');
 
new View({ model: new Artwork() });

You can use sharify to bootstrap dynamic data as well.

Inject data into the sharify.data local

var Artwork = require('../models/artwork');
 
app.get('artwork/:id', function(reqresnext) {
  new Artwork({ id: req.params.id }).fetch({
    successfunction(artwork) {
      res.locals.sharify.data.ARTWORK_JSON = artwork.toJSON();
      res.render('artwork');
    }
  });
});

Require the data on the client

var Artwork = require('../models/artwork'),
    ARTWORK_JSON = require('sharify').data.ARTWORK_JSON,
    View = require('view.js');
 
new View({ model: new Artwork(ARTWORK_JSON) });

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

MIT