Skip to content

Latest commit

 

History

History
113 lines (77 loc) · 2.53 KB

README.md

File metadata and controls

113 lines (77 loc) · 2.53 KB

@otterhttp/parsec

HTTP request body-parsing for modern Node.js.

📌 This project is a fork of tinyhttp/milliparsec.

npm GitHub Workflow Status Coverage

Features

  • ⏩ built with async / `await
  • 🛠 support for
    • JSON
    • urlencoded
    • text
    • multipart/form-data
  • 🔥 no dependencies
  • otterhttp support
  • ⚡ 30% faster than body-parser

Install

# pnpm
pnpm i @otterhttp/parsec

# yarn
yarn add @otterhttp/parsec

# npm
npm i @otterhttp/parsec

Usage

Basic example

Use a middleware inside a server:

import { createServer } from 'node:http'
import { json } from '@otterhttp/parsec'

const parseJsonBody = json()

const server = createServer(async (req: HasBody, res) => {
  await parseJsonBody(req, res, (err) => void console.log(err))

  res.setHeader('Content-Type', 'application/json')

  res.end(JSON.stringify(req.body))
})

Web frameworks integration

otterhttp

import { App } from '@otterhttp/app'
import { urlencoded } from '@otterhttp/parsec'

new App()
  .use(urlencoded())
  .post('/', (req, res) => void res.send(req.body))
  .listen(3000, () => console.log(`Started on http://localhost:3000`))

API

raw(req, res, cb)

Minimal body parsing without any formatting.

text(req, res, cb)

Converts request body to string.

urlencoded(req, res, cb)

Parses request body using new URLSearchParams.

json(req, res, cb)

Parses request body using JSON.parse.

custom(fn)(req, res, cb)

Custom function for parsec.

// curl -d "this text must be uppercased" localhost
await makeCustom(
        req,
        (d) => d.toUpperCase(),
        (err) => {
        }
)
res.end(req.body) // "THIS TEXT MUST BE UPPERCASED"

What does "parsec" mean?

The parsec is a unit of length used to measure large distances to astronomical objects outside the Solar System.