JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 7
  • Score
    100M100P100Q72196F
  • License AGPL-3.0

Higher-Level Content Negotiation In ES6 Optimised With JavaScript Compiler.

Package Exports

  • @goa/accepts

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@goa/accepts) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

@goa/accepts

npm version

@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.

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

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.


Art Deco © Art Deco for Idio 2019 Idio Tech Nation Visa Tech Nation Visa Sucks