From e8c373694c02ecd6be67eaf64361b809ffafe8bd Mon Sep 17 00:00:00 2001 From: TJ Holowaychuk Date: Sat, 19 Nov 2011 22:12:09 -0800 Subject: [PATCH] Added req.acceptedLanguages --- lib/request.js | 24 +++++++++++++++++++++++ test/req.accepted.js | 2 +- test/req.acceptedLanguages.js | 37 +++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 test/req.acceptedLanguages.js diff --git a/lib/request.js b/lib/request.js index 15308ebe..298f3249 100644 --- a/lib/request.js +++ b/lib/request.js @@ -173,6 +173,30 @@ req.__defineGetter__('accepted', function(){ : []; }); +/** + * Return an array of Accepted languages + * ordered from highest quality to lowest. + * + * Examples: + * + * Accept-Language: en;q=.5, en-us + * ['en-us', 'en'] + * + * @return {Array} + * @api public + */ + +req.__defineGetter__('acceptedLanguages', function(){ + var accept = this.header('Accept-Language'); + return accept + ? utils + .parseQuality(accept) + .map(function(obj){ + return obj.value; + }) + : []; +}); + /** * Return the value of param `name` when present or `defaultValue`. * diff --git a/test/req.accepted.js b/test/req.accepted.js index 3793d8c6..9f855526 100644 --- a/test/req.accepted.js +++ b/test/req.accepted.js @@ -4,7 +4,7 @@ var express = require('../') describe('req', function(){ describe('.accepted', function(){ - it('should return an array of accepted content-types', function(done){ + it('should return an array of accepted media types', function(done){ var app = express(); app.use(function(req, res){ diff --git a/test/req.acceptedLanguages.js b/test/req.acceptedLanguages.js new file mode 100644 index 00000000..9325d955 --- /dev/null +++ b/test/req.acceptedLanguages.js @@ -0,0 +1,37 @@ + +var express = require('../') + , request = require('./support/http'); + +describe('req', function(){ + describe('.acceptedLanguages', function(){ + it('should return an array of accepted languages', function(done){ + var app = express(); + + app.use(function(req, res){ + req.acceptedLanguages[0].should.equal('en-us'); + req.acceptedLanguages[1].should.equal('en'); + res.end(); + }); + + request(app) + .get('/') + .set('Accept-Language', 'en;q=.5, en-us') + .expect(200, done); + }) + + describe('when Accept-Language is not present', function(){ + it('should default to []', function(done){ + var app = express(); + + app.use(function(req, res){ + req.acceptedLanguages.should.have.length(0); + res.end(); + }); + + request(app) + .get('/') + .expect(200, done); + }) + }) + }) +})