Skip to content

A DataSource for Falcor that can be use to retrieve JSON Graph data from an HTTP server.

License

Notifications You must be signed in to change notification settings

Netflix/falcor-http-datasource

Folders and files

NameName
Last commit message
Last commit date

Latest commit

e85191b · Jul 1, 2016

History

96 Commits
Jul 1, 2016
Jul 1, 2016
Sep 12, 2015
Feb 23, 2015
May 26, 2015
May 2, 2015
Dec 11, 2015
Jun 30, 2016
May 26, 2015
Jan 29, 2016

Repository files navigation

HttpDataSource

This is a Falcor DataSource which can be used to retrieve JSON Graph information from an HTTP server.

Install

npm install falcor-http-datasource

Usage

Minimalistic ES6 example, a quick dirty setup

import falcor from 'falcor';
import HttpDataSource from 'falcor-http-datasource';

var model = new falcor.Model({
  source: new HttpDataSource('/model.json')
});

If you need some additional info for your global HTTP requests consider something like

JWT

var source = new HttpDataSource('/model.json', {
  headers: {
    'Authorization': `bearer ' + token`
  }
});

POST JSON

var source = new HttpDataSource('/model.json', {
  headers: {
    'Content-Type': 'application/json'
  }
});

Cookies

var source = new HttpDataSource('/model.json', {
  withCredentials: true
});
// server must include the header `Access-Control-Allow-Credentials: true`

CORS

var source = new HttpDataSource('/model.json', {
  crossDomain: true
});

or you might want to pass it to constructor as your global AppSource

export class AppSource extends HttpDataSource {
  constructor(path, token) {
    super(path, {
      headers: {
        'Authorization': `bearer ${ token }`
      }
      timeout: 20000
    })
  }

  get(...args) {
    // returns an Observable if you wanted to map/filter/reduce/etc
    return super.get(...args)
  }
  set(...args) {
    // returns an Observable if you wanted to map/filter/reduce/etc
    return super.set(...args)
  }
  call(...args) {
    // returns an Observable if you wanted to map/filter/reduce/etc
    return super.call(...args)
  }

  onBeforeRequest(config) {
    // as of now you're able to mutate the config object before we create our xhr instance
    // you would attach any url params here
    // config.url = config.url + '&something=Value'
    console.log(config);
  }
  buildQueryObject(...args) {
    // helper method to build our url for advanced implementations
    return super.buildQueryObject(...args)
  }
}

export class FalcorModel extends falcor.Model {
  constructor(cache) {
    super({
      cache: cache,
      source: new AppSource('/model.json', user.token)
    });
  }
}