• SELECTED WORK
  • ABOUT
  • CONTACT
  • BLOG
JENNY WEIN
  • SELECTED WORK
  • ABOUT
  • CONTACT
  • BLOG

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
if sharify.data.NODE_ENV == 'development'
#debug-modal
#scripts
//- Make sure this is above your other scripts
!= sharify.script()
script( src='/bundle.js' )

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_JWEIN = artwork.toJWEIN();
res.render('artwork');
}
});
});

Require the data on the client

var Artwork = require('../models/artwork'),
ARTWORK_JWEIN = require('sharify').data.ARTWORK_JWEIN,
View = require('view.js');

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

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

Tuesday 01.14.14
Posted by Jennifer Wein
Newer / Older

JENNY WEIN © 2024