Standard, framework-agnostic HTTP interfaces for JavaScript servers and clients.
npm install servie --save
throwbackCompose middleware functions into a single functionpopsicleHTTP request library for node.js and browsersservie-lambdaServie transport layer for AWS Lambdaservie-httpServie transport layer for node.js HTTPget-bodyGeneral body parser for forms, JSON and textservie-corsCORS middleware for Servieservie-routeRouting middleware for Servieservie-mountMount Servie middleware on a path prefixservie-compat-httpMimic node.js HTTP using Servieservie-redirectCreate response objects for redirectionservie-cookie-storeAPI for managing client-side cookiesservie-errorhandlerStandard error handler for transport layersservie-finalhandlerStandard final handler for transport layershttp-errorsCreate HTTP errorsboomHTTP-friendly error objectsconsolidateTemplate 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
domtypes in TypeScript. When in a node.js, or browser, only environment, prefer importingservie/dist/{node,browser}instead.
Base HTTP class shared between
RequestandResponse.
new Body(body, headers);Supported body types, depending on environment:
- Node.js - 
string | Buffer | ArrayBuffer | Readable | null | undefined - Browser - 
string | ArrayBuffer | ReadableStream | null | undefined 
bodyUsedBoolean whether the body is already consumedtext()Returns the body as aPromise<string>json()Returns the body withJSON.parseasPromise<any>arrayBuffer()Returns the body as aPromise<ArrayBuffer>clone()Clones an unconsumed bodydestroy()Consumes and destroys the body
HTTP class for modelling a
Request, extendsBody.
new Request(input [, init]);A URL string or another Request instance to clone from.
method?HTTP request method.body?Any support body types.signal?A signal from anAbortController.headers?A map, list of tuples, orHeaderinstance to initialize from.trailer?A promise resolve to a support header initialization types (above).
urlRequested url stringmethodRequested method stringsignalSignal event emitterheadersAHeadersinstancetrailerAPromise<Headers>instanceclone()Clones the request into a new instance
HTTP class for modelling a
Response, extendsBody.
new Response([body [, init]]);One of the support body types (above).
status?The numeric HTTP response status codestatusText?The HTTP response status text
statusThe numeric HTTP response status codestatusTextThe HTTP response status textokBoolean indicates successful response (statusbetween 200 and 299)headersAHeadersinstancetrailerAPromise<Headers>instanceclone()Clones the response into a new instance
Map representation of HTTP headers.
new Headers([init]);Initialize headers from Iterable<HeaderTuple>, a HeadersObject or an existing Headers instance.
set(name: string, value: string | string[]): voidSet a HTTP header by overriding case-insensitive headers of the same nameappend(name: string, value: string | string[]): voidAppend a HTTP headerget(name: string): string | undefinedRetrieve a case-insensitive HTTP headergetAll(name: string): string[]Retrieve a list of matching case-insensitive HTTP headershas(name: string): booleanCheck if a case-insensitive header is already setdelete(name: string): voidDelete a case-insensitive headerasObject(): HeadersObjectReturn the lower-cased headers as a plain objectextend(obj: HeadersInit): thisExtends 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 theHeadersinstance
Simple controller for aborting a
Requestinstance.
new AbortController();signalASignalinstance to pass to aRequestabort()Used to abort any listening requests through thesignal
Tiny event emitter for communicating during a request.
abortedBoolean 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
abortThe request has been abortedrequestBytesEmitted on request progress with current bytesrequestEndedThe request has endedrequestStartedThe request has been startedresponseBytesEmitted on response progress with current bytesresponseEndedThe response has endedresponseStartedThe response has started
Plugins can emit new types of events.
If you're building the transports for Servie, there are some life cycle events you need to be aware of:
- Listen to the 
errorevent onsignalfor errors - Listen to the 
abortevent onsignalto destroy the connection - Resolve 
trailerpromise and append to HTTP request or response - There are some existing built-in type-safe events in 
SignalEventsyou can support 
This module is designed for ES2017 environments and published with TypeScript definitions on NPM.
Apache 2.0