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(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() });
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) });
Please fork the project and submit a pull request with tests. Install node modules npm install
and run tests with make test
.
MIT