/fluxible-plugin-fetchr

A plugin for fluxible applications to provide an isomorphic interface for RESTful services

Primary LanguageJavaScriptOtherNOASSERTION

Fetchr Plugin for Fluxible

npm version Build Status Dependency Status devDependency Status Coverage Status

Provides isomorphic RESTful service access to your Fluxible application using fetchr.

Usage

var Fluxible = require('fluxible');
var fetchrPlugin = require('fluxible-plugin-fetchr');
var app = new Fluxible();

app.plug(fetchrPlugin({
    xhrPath: '/api' // Path for XHR to be served from
}));

Now, when calling the createContext method on the server, make sure to send in the request object and optionally pass an xhrContext which will be used as parameters for all XHR calls:

app.createContext({
    req: req,
    xhrContext: { // Used as query params for all XHR calls
        lang: 'en-US', // make sure XHR calls receive the same lang as the initial request
        _csrf: 'a3fc2d' // CSRF token to validate on the server using your favorite library
    }
});

Registering Your Services

Registering fetchr services is done on the server side. Since the fetchr plugin is in control of the fetchr class, we expose this through the registerService method.

pluginInstance.registerService(yourService);

Or if you need to do this from your application without direct access to the plugin

app.getPlugin('FetchrPlugin').registerService(yourService);

For real examples, you can check out the server.js file in our chat example.

Exposing Your Services

Fetchr also contains an express/connect middleware that can be used as your access point from the client.

var server = express();
server.use(pluginInstance.getXhrPath(), pluginInstance.getMiddleware());

For real examples, you can check out the server.js file in our chat example.

Dynamic XHR Paths

The fetchrPlugin method can also be passed a getXhrPath function that returns the string for the xhrPath. This allows you to dynamically set the xhrPath based on the current context. For instance, if you're hosting multiple sites and want to serve XHR via a pattern route like /:site/api, you can do the following:

app.plug(fetchrPlugin({
    getXhrPath: function (contextOptions) {
        // `contextOptions` is the object passed to `createContext` above
        return contextOptions.req.params.site + '/api';
    }
}));

API

License

This software is free to use under the Yahoo! Inc. BSD license. See the LICENSE file for license text and copyright information.