Skip to content

fiverr/gofor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

34 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

gofor

Each Gofor instance exposes a fetch method: a lean, isomorphic fetch decorator that deep reverse merges default options.

Options you pass through in for each request will take precedence, but will supplemented with the defaults.

Installation

npm i gofor

Usage

Using the Gofor class

const Gofor = require('gofor');
const myGofor = new Gofor({headers: {'X-Custom-Header': 'Custom-Value'}});

myGofor.fetch('/page')
    .then(...)
    .catch(...);

"Out of the box" usability with instances

You can opt to import the gofor property to get a working instance with the default environment Headers:

const { gofor } = require('gofor');

gofor('/page').then(...); // This is the fetch

Each call to Gofor.gofor generates a new instance:

const gofor1 = require('gofor').gofor;
const gofor2 = require('gofor').gofor;

gofor1 === gofor2 // false

Configuring an instance

const { gofor } = require('gofor');
const defaultHeaders = new Headers();

defaultHeaders.append('X-Requested-With', 'XMLHttpRequest');
defaultHeaders.append('Content-Type', 'application/json; charset=utf-8');
defaultHeaders.append('Accept', 'application/json');

gofor.config({
    credentials: 'same-origin',
    headers: defaultHeaders
});

// Use only defaults
gofor('https://www.website.com').then(...);

// Add/Apply other options
gofor('/page', {
    headers: {
        'X-Custom-Header': 'Custom-Value'
    }
}).then(...);

Setting Headers

Gofor supports setting headers either as an object literal or as a Headers instance Default header keys will be run over if matched by passed in header keys. Other keys will be merged. This is made by design.

Example
// Configure using the "Headers" constructor

gofor.config({
    credentials: 'same-origin',
    headers: new Headers({
        'Content-Type': 'application/json; charset=utf-8',
        'X-Custom-Header': 'Custom-Value'
    })
});

// Or, using an object literal

gofor.config({
    credentials: 'same-origin',
    headers: {
        'Content-Type': 'application/json; charset=utf-8',
        'X-Custom-Header': 'Custom-Value'
    }
});

gofor('/page', {
    headers: new Headers({
        'Content-Type': 'text/plain',
    })
});

Final headers will be:

    'Content-Type': 'text/plain',
    'X-Custom-Header': 'Custom-Value'

Delayed configuration

The function will be called once on first use, and its result will be memoised. useful for cases where you need to pull information from the document and don't want to create a race condition.

const { gofor } = require('gofor');

gofor.config(() => ({
    credentials: 'same-origin',
    headers: {
        'X-Requested-With': 'XMLHttpRequest',
        'Content-Type': 'application/json; charset=utf-8',
        'Accept': 'application/json',
        'X-Custom-Secret': document.getElementById('secret').value,
    },
}));

FAQ

How do I migrate from version 2 to version 3?

The two breaking changes in version 3 are:

  • Deprecation of the server entry (gofor/server) in favor of a truly isomorphic solution.
  • Deprecation of the dist folder.