Higher-Level Content Negotiation In ES6 Optimised With JavaScript Compiler.
npm install @goa/accepts
@goa/accepts is a fork of 🏛 Higher-Level Content Negotiation In ES6 Optimised With JavaScript Compiler.
``sh`
yarn add @goa/accepts
- Table Of Contents
- API
- class Accepts
* constructor(req): Accepts
- Copyright & License
The package is available by importing its default class:
`js`
import Accepts from '@goa/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 *.
Create a new Accepts object for the given request from a client.
- req* : The request.
!http.IncomingMessage
`js
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('hello, world!')
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: hello, world! Type: text/html
Response: hello, world! Type: text/plain
🔖 View all instance methods in Wiki
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.
---
alt="Art Deco"> | © Art Deco for Idio 2019 | alt="Tech Nation Visa"> | Tech Nation Visa Sucks |
|---|