Standard, framework-agnostic HTTP interfaces for JavaScript servers and clients.
Installation
npm install servie --save
Usage
throwback
Compose middleware functions into a single functionpopsicle
HTTP request library for node.js and browsersservie-lambda
Servie transport layer for AWS Lambdaservie-http
Servie transport layer for node.js HTTPget-body
General body parser for forms, JSON and textservie-cors
CORS middleware for Servieservie-route
Routing middleware for Servieservie-mount
Mount Servie middleware on a path prefixservie-compat-http
Mimic node.js HTTP using Servieservie-redirect
Create response objects for redirectionservie-cookie-store
API for managing client-side cookiesservie-errorhandler
Standard error handler for transport layersservie-finalhandler
Standard final handler for transport layershttp-errors
Create HTTP errorsboom
HTTP-friendly error objectsconsolidate
Template rendering
import { Body, Request, Response, Headers, AbortController } from "servie";
Servie is a universal package, meaning node.js and browsers are supported without needing configuration. This means the primary endpoint requires some
dom
types in TypeScript. When in a node.js, or browser, only environment, prefer importingservie/dist/{node,browser}
instead.
Body
Base HTTP class shared between
Request
andResponse
.
new Body(body, headers);
Body
Supported body types, depending on environment:
- Node.js -
string | Buffer | ArrayBuffer | Readable | null | undefined
- Browser -
string | ArrayBuffer | ReadableStream | null | undefined
Properties and Methods
bodyUsed
Boolean whether the body is already consumedtext()
Returns the body as aPromise<string>
json()
Returns the body withJSON.parse
asPromise<any>
arrayBuffer()
Returns the body as aPromise<ArrayBuffer>
clone()
Clones an unconsumed bodydestroy()
Consumes and destroys the body
Request
HTTP class for modelling a
Request
, extendsBody
.
new Request(input [, init]);
Input
A URL string or another Request
instance to clone from.
Init
method?
HTTP request method.body?
Any support body types.signal?
A signal from anAbortController
.headers?
A map, list of tuples, orHeader
instance to initialize from.trailer?
A promise resolve to a support header initialization types (above).
Properties and Methods
url
Requested url stringmethod
Requested method stringsignal
Signal event emitterheaders
AHeaders
instancetrailer
APromise<Headers>
instanceclone()
Clones the request into a new instance
Response
HTTP class for modelling a
Response
, extendsBody
.
new Response([body [, init]]);
Body
One of the support body types (above).
Init
status?
The numeric HTTP response status codestatusText?
The HTTP response status text
Properties and Methods
status
The numeric HTTP response status codestatusText
The HTTP response status textok
Boolean indicates successful response (status
between 200 and 299)headers
AHeaders
instancetrailer
APromise<Headers>
instanceclone()
Clones the response into a new instance
Headers
Map representation of HTTP headers.
new Headers([init]);
Init
Initialize headers from Iterable<HeaderTuple>
, a HeadersObject
or an existing Headers
instance.
Methods
set(name: string, value: string | string[]): void
Set a HTTP header by overriding case-insensitive headers of the same nameappend(name: string, value: string | string[]): void
Append a HTTP headerget(name: string): string | undefined
Retrieve a case-insensitive HTTP headergetAll(name: string): string[]
Retrieve a list of matching case-insensitive HTTP headershas(name: string): boolean
Check if a case-insensitive header is already setdelete(name: string): void
Delete a case-insensitive headerasObject(): HeadersObject
Return the lower-cased headers as a plain objectextend(obj: HeadersInit): this
Extends the current headers with an objectkeys()
Iterable of the available header namesvalues()
Iterable of header valuesentries()
Iterable of headers as[key, value]
clear()
Clears the headers instanceclone()
Clones theHeaders
instance
AbortController
Simple controller for aborting a
Request
instance.
new AbortController();
Properties and Methods
signal
ASignal
instance to pass to aRequest
abort()
Used to abort any listening requests through thesignal
Signal
Tiny event emitter for communicating during a request.
Methods
aborted
Boolean indicating whether the request is abortedon(type, fn)
Attach an event listener to an event typeoff(type, fn)
Remove an event listener from an event typeeach(fn)
Attach an event listener for all eventsnone(fn)
Remove a global event listeneremit(type, ...args)
Emit an event to all listeners
Standard Events
abort
The request has been abortedrequestBytes
Emitted on request progress with current bytesrequestEnded
The request has endedrequestStarted
The request has been startedresponseBytes
Emitted on response progress with current bytesresponseEnded
The response has endedresponseStarted
The response has started
Plugins can emit new types of events.
Implementation
If you're building the transports for Servie, there are some life cycle events you need to be aware of:
- Listen to the
error
event onsignal
for errors - Listen to the
abort
event onsignal
to destroy the connection - Resolve
trailer
promise and append to HTTP request or response - There are some existing built-in type-safe events in
SignalEvents
you can support
JavaScript
This module is designed for ES2017 environments and published with TypeScript definitions on NPM.
License
Apache 2.0