1. zap
Lightweight HTTP server framework for Node
zap
Package: zap
Created by: jacobwgillespie
Last modified: Wed, 29 Jun 2022 08:56:11 GMT
Version: 2.1.1
License: MIT
Downloads: 2,874
Repository: https://github.com/jacobwgillespie/zap

Install

npm install zap
yarn add zap

⚡ zap npm CI

Zap is a lightweight HTTP server framework for Node.

Installation

Install with your favorite package manager:

 $ pnpm add zap
$ yarn add zap
$ npm install zap

Usage

 import {route, router, serve} from 'zap'

const app = router(
  route('GET', '/', () => 'Hello World'),

  route('GET', '/hello/:name', (req) => `Hello ${req.params.name}`),
)

const server = http.createServer(serve(app))
server.listen(3000)

API

serve(handler, options)

Constructs a new http.RequestListener out of a Handler.

router(...routes)

Constructs a new Handler out of a list of RouteHandlers.

route(method, path, handler)

Constructs a RouteHandler that matches a given method (GET, POST, etc) and path.

Body parsers

  • buffer(req, options) - read the request body as a Buffer
  • text(req, options) - read the request body as a string
  • json(req, options) - read the request body as parsed JSON

Request helpers

  • getHeader(req, header) - returns the requested header if it was provided
  • fromRequest(fn) - wraps a function in the form (req: ServerRequest, ...rest) => any to return an equivalent function that caches its results for the provided request

Response helpers

  • Ordinarily you would return a ResponseBodyType from a Handler function
  • send(res, statusCode, body) - a response with a given status code
  • notFound() - a 404 response
  • redirect(location, statusCode) - a redirect to another location (default status code 303)
  • httpError(code, message, metadata) - an error response with a given code, message, and optional metadata

Recipes

Validating body schema

You can use a function that throws an httpError to provide type-safe body payload parsing:

 async function parseBody(req: ServerRequest) {
  const body = await json(req)
  if (!validate(body)) throw httpError(400, 'invalid body')
  return body
}

route('POST', '/example', (req) => {
  const body = await parseBody(req)
  // body is now typed according to your parseBody return type
})

Error handling

The serve() function options accept an errorHandler that will replace zap's built-in error handler. This allows you to report errors to services like Sentry, format the response sent to the user, etc.

 serve(handler, {
  errorHandler: (_, res, error) => {
    send(res, 500, {message: 'Internal server error', details: formatError(error)})
  },
})

Credits

Special thanks to @nornagon for the zap package name. For versions of this module published before v1.0.0, see nornagon/node-zap.

License

MIT License, see LICENSE.

RELATED POST

10 Must-Know Windows Shortcuts That Will Save You Time

10 Must-Know Windows Shortcuts That Will Save You Time

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Navigating AWS Networking: Essential Hacks for Smooth Operation

Navigating AWS Networking: Essential Hacks for Smooth Operation

Achieving Stunning Visuals with Unity's Global Illumination

Achieving Stunning Visuals with Unity's Global Illumination

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code