A lightweight, zero-dependency utility for extracting query parameters and request body data from both Node.js IncomingMessage and Web standard Request objects. Supports Node.js, Deno, Bun, Cloudflare Workers, and more. Type-safe, auto-adaptive, and suppo
npm install body-dataGET requests
POST requests
application/json, x-www-form-urlencoded, text/plain, multipart/form-data, and others
bash
npm install body-data
or
pnpm add body-data
``
---
๐ Usage Examples
$3
bodyData is a high-level utility that returns both params (query) and body data.
`ts
import http from 'node:http'
import { bodyData } from 'body-data'
http.createServer(async (req, res) => {
const data = await bodyData(req)
res.setHeader('Content-Type', 'application/json')
res.end(JSON.stringify(data))
}).listen(3000)
`
Request Example:
`bash
curl "http://localhost:3000?name=lete&age=18" \
-X POST \
-H "Content-Type: application/json" \
-d '{"gender":"male"}'
`
Response:
`json
{
"params": {
"name": "lete",
"age": "18"
},
"body": {
"gender": "male"
}
}
`
---
$3
Use getParams to only extract query parameters from the URL.
`ts
import http from 'node:http'
import { getParams } from 'body-data'
http.createServer((req, res) => {
const params = getParams(req)
res.setHeader('Content-Type', 'application/json')
res.end(JSON.stringify({ params }))
}).listen(3000)
`
Request Example:
`bash
curl "http://localhost:3000?foo=bar&count=10"
`
Response:
`json
{
"params": {
"foo": "bar",
"count": "10"
}
}
`
---
$3
Use getBody to only extract the body from a POST request.
`ts
import http from 'node:http'
import { getBody } from 'body-data'
http.createServer(async (req, res) => {
const body = await getBody(req)
res.setHeader('Content-Type', 'application/json')
res.end(JSON.stringify({ body }))
}).listen(3000)
`
Request Example:
`bash
curl "http://localhost:3000" \
-X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=test&password=1234"
`
Response:
`json
{
"body": {
"username": "test",
"password": "1234"
}
}
`
---
๐ API Reference
$3
Returns an object with:
* params: Query parameters (from URL)
* body: Parsed request body
$3
Parses the query string from the request URL.
$3
Parses the body of the request based on Content-Type. Supports:
* application/json
* application/x-www-form-urlencoded
* text/plain
* multipart/form-data (returns raw string)
* Fallback: returns { raw: string }
#### Options (IBodyOptions):
| Option | Type | Description |
| ----------------- | ---------------------- | ----------------------------------------------------------- |
| raw | boolean | Return raw body string instead of parsing. Default: false |
| encoding | BufferEncoding | Text encoding for reading the body. Default: 'utf-8' |
| contentType | string | Force a specific Content-Type (overrides request headers) |
| backContentType | string | Fallback Content-Type when none is provided |
| onError | (err: Error) => void | Custom error handler for parse or stream errors |
โ
Example with Custom Options
`ts
const body = await getBody(req, {
raw: false,
encoding: 'utf-8',
contentType: 'application/json',
backContentType: 'text/plain',
onError: err => console.error('Body parse error:', err),
})
`
๐งช Testing
`bash
pnpm test
``