Skip to content

artsy/sharify

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

sharify

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

Example

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

Inject some constant data on the server and mount sharify

var sharify = require('sharify');
sharify.data = {
  API_URL: 'http://artsy.net/api/v1',
  NODE_ENV: process.env.NODE_ENV
};
app.use(sharify);

Use in a module that can run on the server or client

var Backbone = require('backbone'),
    API_URL = require('sharify').data.API_URL;

var Artwork = module.exports = Backbone.Model.extend({
  urlRoot: API_URL + '/artwork/'
};

Inject sharify script in the view

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.

Use the shared module server/client

// server.js
var Artwork = require('../models/artwork');

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

new View({ model: new Artwork() });

Bootstrapping Request-level Data to the Client

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(req, res, next) {
  new Artwork({ id: req.params.id }).fetch({
    success: function(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) });

Contributing

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

License

MIT

About

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

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published