@mrporter/mrp-locale-middleware

0.0.8 • Public • Published

MRP Locale Express Middleware and Country Data Service

Country Data

  • Access and cache supported country data
    • Country data periodically pulled from this service
    • A snapshot of this data is pre-packaged within this module and used when cannot access this data

Express Middleware

  • Calculates which locale should be applied to a user's request based on URL, GEO headers, preference cookies, etc.
  • Adds a 'locale' object to the request object of the form:
// note the country payload is defined by the "mrp-locale-info" project
request.locale === {
  country: {
      "iso": "MO",
      "name": "Macau",
      "region": "intl",
      "currency": "GBP",
      "localCurrency": "MOP"
  }, 
  languageISO: "en"
}
  • (Default but optional) If a the URL requested contains a locale pre-fix that does not match the user's cookie preference, then redirect to the same URL but with their prefered locale

Usage

Usage: Express Middleware

var opts = {
	dataURL: "http://www.mrporter.com/locale-info/en/countries.json", // required
	cachePath: "./country-data-cache",   // Not recommended for clustered environmnets.  If ommited, use an in-memory cache
	preventFallbackToPrepackagedData: false, // optional, default: false
  hostOverride: "www.mrporter.com", // optional.  Relative paths used if not specified
	logger: winston // optional
}
app.use(require('@mrporter/mrp-locale-middleware').createLocaleMiddleware(opts));

Usage: Country Service

var opts = {
  dataURL: "http://www.mrporter.com/locale-info/en/countries.json", // required
  cachePath: "./country-data-cache",   // Not recommended for clustered environmnets.  If ommited, use an in-memory cache
  preventFallbackToPrepackagedData: false, // optional, default: false
  logger: winston // optional
}
var countryService = require('@mrporter/mrp-locale-middleware').CountryService(opts);
countryService.getSupportedCountry("FR", function(err, country) {
        if (err !== null) {
            // Something went wrong
        } else {
            // Do something with the country
            console.log("My Country data: " + JSON.stringify(country));
        }
    });

TODO

  • Timeouts for HTTP connection
  • Consider connection pool, circuit breaker and retry policy for HTTP requests
  • Support non-English language

Readme

Keywords

Package Sidebar

Install

npm i @mrporter/mrp-locale-middleware

Weekly Downloads

1

Version

0.0.8

License

none

Last publish

Collaborators

  • mrporteradmin