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" projectrequest.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
varopts={dataURL: "http://www.mrporter.com/locale-info/en/countries.json",// requiredcachePath: "./country-data-cache",// Not recommended for clustered environmnets. If ommited, use an in-memory cachepreventFallbackToPrepackagedData: false,// optional, default: falsehostOverride: "www.mrporter.com",// optional. Relative paths used if not specifiedlogger: winston// optional}app.use(require('@mrporter/mrp-locale-middleware').createLocaleMiddleware(opts));
Usage: Country Service
varopts={dataURL: "http://www.mrporter.com/locale-info/en/countries.json",// requiredcachePath: "./country-data-cache",// Not recommended for clustered environmnets. If ommited, use an in-memory cachepreventFallbackToPrepackagedData: false,// optional, default: falselogger: winston// optional}varcountryService=require('@mrporter/mrp-locale-middleware').CountryService(opts);countryService.getSupportedCountry("FR",function(err,country){if(err!==null){// Something went wrong}else{// Do something with the countryconsole.log("My Country data: "+JSON.stringify(country));}});
TODO
Timeouts for HTTP connection
Consider connection pool, circuit breaker and retry policy for HTTP requests