Skip to content

fchambo/node-http-cache

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

89 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status Build Status NPM version

Gitter

NPM

#HTTP Cache

This module uses a simple filesystem storage (levelup) to persist http responses. Storage is updated using cron expressions (see crontab manpage for more detail on how to build these expressions).


##Usage

var cacheFactory = require('node-http-cache');

// (...)

var config = {
  //Any logger with the following defined functions: error, warn, info, debug.
	logger: require('winston'),
	//Folder where the storage will be created.
	location: '/tmp',
	//List of services
	services:[{
		//Update every day at 00:00
		cronExpression: '0 0 * * *',
		name: 'cities',
		timezone: 'America/Buenos_Aires',
		httpOptions:{
			url: 'http://api.geonames.org/citiesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&lang=de&username=demoapp',
			headers: {
				'accept':'application/json'
			}
		},
		indexes: ['countrycode']
	}]
};

// (...)

var cache = cacheFactory(config);

// (...)

// Retrieves all cities
var allCities = cache.get(
  {
    name: 'cities'
  }
);
var onlyMXCities = cache.get(
  {
	  name: 'cities', 
	  indexKey: 'countrycode',
	  indexValue: 'MX'
); 

Configuration

location

Required: true

Root folder for levelup storage. Inside this directory a folder with the name node-http-cache.db will be created.

logger

Required: true

Any logger can be used here. The only requirement is to have this functions defined: error, warn, info, debug.

services.name

Required: true

Service identifier, this name MUST BE UNIQUE among all services.

services.cronExpression

Required: true

Use crontab expressions to specify when the snapshot should be updated.

services.httpOptions

Required: true

Node HTTP Cache uses HTTP Module internally to make the requests. You can set any option specified in its docs. Only service.httpOptions.url is required.

services.timezone

Required: false

Default: 'GMT-0'

services.itemsPath

Required: false

Path to specify where is the array of objects to store. For example, if the response of the service is: {items:[]}, then itemsPath: 'items'. To specify nested elements, you can use dot notation (i.e.: itemsPath: 'root.items')

services.indexes

Required: false

Array of fields to be indexed. For example, if the response of the service is [{ "user": "barney", "age": 36, "active": true},{ "user": "fred", "age": 40, "active": false }], then you can create an index by user using indexes: ["user"]

Retrieve data

get(config)

Retrieves data saved using the config received as parameter.

Returns a Promise

config.name

Required: true

Name used in config when the snapshot was created.

config.indexKey

Required: false

Name of the index used to search.

config.indexValue

*Required: false

If you specify an indexKey you MUST specify an indexValue.

Events

getData

Once data is retrieved from the filesystem storage.

{
  //Name of service retrieved
  name: String,
  //Data retrieved
  data: Object
}

getError

Error retrieving data from the filesystem storage. The returning value is an instance of Error

updateData

Once data is updated to the filesystem storage.

{
  //Name of service updated
  name: String,
  //Data retrieved
  data: Object
}

updateError

Error updating data for service. The returning value is an instance of Error

TO DO

  • Partial Updates
  • In memory storage
  • Indexes