@goa/accepts
v2.0.1
Published
Higher-Level Content Negotiation In ES6 Optimised With JavaScript Compiler.
Downloads
94
Maintainers
Readme
@goa/accepts
@goa/accepts
is a fork of 🏛 Higher-Level Content Negotiation In ES6 Optimised With JavaScript Compiler.
yarn add @goa/accepts
Table Of Contents
API
The package is available by importing its default class:
import Accepts from '@goa/accepts'
class Accepts
The instances of this class allow to negotiate languages, charsets, encoding and types and additionally:
- Allow types as an array or arguments list, i.e.
(['text/html', 'application/json'])
as well as('text/html', 'application/json')
; - Allow type shorthands such as json;
- Return false when no types match;
- Treat non-existent headers as *.
constructor( req: !http.IncomingMessage,
): Accepts
Create a new Accepts object for the given request from a client.
- req* !http.IncomingMessage: The request.
import Accepts from '@goa/accepts'
import { createServer } from 'http'
import aqt from '@rqt/aqt'
function app(req, res) {
const accept = new Accepts(req)
// the order of this list is significant; should be server preferred order
switch (accept.type(['json', 'html'])) {
case 'json':
res.setHeader('Content-Type', 'application/json')
res.write('{"hello":"world!"}')
break
case 'html':
res.setHeader('Content-Type', 'text/html')
res.write('<b>hello, world!</b>')
break
default:
// the fallback is text/plain, so no need to specify it above
res.setHeader('Content-Type', 'text/plain')
res.write('hello, world!')
break
}
res.end()
}
const server = createServer(app)
server.listen(0, async () => {
const url = `http://localhost:${server.address().port}`
let { body, headers } = await aqt(url, {
headers: { 'accept': 'application/json' },
})
console.log('Response:', body, '\tType:', headers['content-type'])
;({ body, headers } = await aqt(url, {
headers: { 'accept': 'text/html' },
}))
console.log('Response:', body, '\tType:', headers['content-type'])
;({ body, headers } = await aqt(url, {
headers: { 'accept': 'text/plain' },
}))
console.log('Response:', body, '\tType:', headers['content-type'])
server.close()
})
Response: { hello: 'world!' } Type: application/json
Response: <b>hello, world!</b> Type: text/html
Response: hello, world! Type: text/plain
🔖 View all instance methods in Wiki
Copyright & License
GNU Affero General Public License v3.0
Original work, documentation and testing by Jonathan Ong and Douglas Christopher Wilson under MIT license found in COPYING.