@mrporter/mrp-locale-middleware
v0.0.8
Published
manages user locale
Downloads
3
Readme
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