Connect compatible middleware that parses HTTP Accept header fields


Accept parses all accept header fields and sorts them according to the HTTP specification.

Parsed into req.accept.types.

Parsed into req.accept.charsets.

Parsed into req.accept.encodings.

Parsed into req.accept.languages.

Parsed into req.accept.ranges.

npm install http-accept

Just require 'http-accept' and throw it into a connect compatible middlware stack.

connect  = require 'connect'
http     = require 'http'
accept   = require 'http-accept'
app = connect()
app.use connect.logger 'dev'
app.use accept
app.use (req, res) ->
    console.log req.accept
app.listen 3000

A request from a browser on http://localhost:3000 would print out

{ types: 
   [ { type: 'text',
       subtype: 'html',
       params: {},
       mediarange: 'text/html',
       quality: 1 },
     { type: 'application',
       subtype: 'xhtml+xml',
       params: {},
       mediarange: 'application/xhtml+xml',
       quality: 1 },
     { type: 'application',
       subtype: 'xml',
       params: [Object],
       mediarange: 'application/xml',
       quality: 0.9 },
     { type: '*',
       subtype: '*',
       params: [Object],
       mediarange: '*/*',
       quality: 0.8 } ],
  charsets: undefined,
  encodings: [ 'gzip', 'deflate' ],
  languages: [ 'de-de', 'de', 'en-us', 'en' ],
  ranges: undefined }

For each header present in the request, there is also a getBestMatch method which will find the highest quality match amongst the supplied candidates.

encoding = (req.accept.encodings?.getBestMatch ["gzip""deflate"]) ? "identity"
mediaType = req.accept.types?.getBestMatch ["text/html""application/json" ,"application/xml"]