3.0.0 • Published 4 years ago

body-parsec v3.0.0

Weekly downloads
5
License
MIT
Repository
github
Last release
4 years ago

parsec 🌌

Twitter Top lang Vulnerabilities Version Last commit Minified size Codecov

Tiniest body parser ever for Node.js.

It puts all the data into req.body so you don't have to create a separate array for it.

parsec is a part of tinyhttp ecosystem.

Features 👀

  • works with Node 13+ ESM and CommonJS 🚀
  • built with async / await
  • JSON / raw / urlencoded / text data support 🛠
  • tiny package size (879B) 📦
  • no dependencies 🔥
  • tinyhttp, Koa and Express support

Installation 🔄

# pnpm
pnpm i body-parsec

# yarn
yarn add body-parsec

# npm
npm i body-parsec

Usage ⏩

Basic example 🖐

Use a middleware inside a server:

import { createServer } = from 'http'
import { json } from 'body-parsec'

createServer(async (req, res) => {
  const parsedData = await json()(req)
  console.log(parsedData) // { 'hello': 'world' }
  res.setHeader('Content-Type', 'application/json')
  res.end(req.body.hello)
}).listen(80)

Then try to make a request to our server:

curl -d '{ "hello": "world" }' localhost

After sending a request, it should output world.

Parsec and web frameworks 💻

tinyhttp

import { App } from '@tinyhttp/app'
import { urlencoded } from 'body-parsec'

const app = new App()

app.use(urlencoded()).post('/', (req, res) => {
  res.send(req.body)
})

app.listen(3000, () => console.log(`Started on http://localhost:3000`))

Express

import Express from 'express'
import { urlencoded } from 'body-parsec'

const app = Express()

app.use(urlencoded())

app.get('/', (req, res) => {
  res.send(`
  <form method="POST" action="/" enctype="application/x-www-form-urlencoded">
  <input name="name" />
  </form>
  `)
})

app.post('/', (req, res) => {
  res.send(`Hello ${req.body.name}!`)
})

app.listen(3000, () => console.log(`Running on http://localhost:3000`))

Koa

import Koa from 'koa'
import { json, CtxWithBody } from 'body-parsec/koa'

const app = new Koa()

app.use(json())

app.use((ctx: CtxWithBody) => {
  if (ctx.method === 'POST') {
    ctx.type = 'application/json'
    ctx.body = ctx.req.body
  }
})

app.listen(3000, () => console.log(`Running on http://localhost:3000`))

API 📦

parsec.raw(req)

Minimal body parsing without any urlencodedatting (even without converting to string):

// Request: curl -d "Hello World"
await parsec.raw()(req)
res.end(req.body) // "Hello World"

parsec.text(req)

Converts request body to string.

// Request: curl -d "Hello World"
await parsec.text()(req)
res.end(req.body) // "Hello World"

parsec.custom(req, fn)

You can use parsec as a a handler for IncomingMessage with a custom urlencodedatter.

Here we make a request body upper case:

// Request: curl -d "this text must be uppercased" localhost
await parsec.custom(req, (data) => data.toUpperCase())
res.end(req.body) // "THIS TEXT MUST BE UPPERCASED"

parsec.json(req)

Parses request body using JSON.parse.

// Request: curl -d { "hello": "world" } localhost
await parsec.json()(req)
res.end(req.body.hello) // world

parsec.urlencoded(req)

Parses request body using querystring.parse.

// Request: curl -d 'username=pro_gamer'
await parsec.urlencoded()(req)
res.end(req.body.username) // pro_gamer

What is "parsec"?

The parsec (symbol: pc) is a unit of length used to measure large distances to astronomical objects outside the Solar System.

3.0.0

4 years ago

2.1.0

4 years ago

2.0.20

4 years ago

2.0.19

4 years ago

2.0.18

4 years ago

2.0.17

4 years ago

2.0.16

4 years ago

2.0.15-a

4 years ago

2.0.14

4 years ago

2.0.13

4 years ago

2.0.12

4 years ago

2.0.11

4 years ago

2.0.10

4 years ago

2.0.7

4 years ago

2.0.9

4 years ago

2.0.6

4 years ago

2.0.5

4 years ago

2.0.3

4 years ago

2.0.4

4 years ago

2.0.0

4 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago