sharify
v0.1.6
Published
Easily share data between modules meant to run on the server and client using browserify.
Downloads
7,301
Maintainers
Readme
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