Skip to main content
Version: Next

README

undici.request() examples

A simple GET request, read the response body as text:

const { request } = require('undici')
async function getRequest (port = 3001) {
// A simple GET request
const {
statusCode,
headers,
body
} = await request(`http://localhost:${port}/`)

const data = await body.text()
console.log('response received', statusCode)
console.log('headers', headers)
console.log('data', data)
}

A JSON POST request, read the response body as json:

const { request } = require('undici')
async function postJSONRequest (port = 3001) {
const requestBody = {
hello: 'JSON POST Example body'
}

const {
statusCode,
headers,
body
} = await request(
`http://localhost:${port}/json`,
{ method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify(requestBody) }
)

// .json() will fail if we did not receive a valid json body in response:
const decodedJson = await body.json()
console.log('response received', statusCode)
console.log('headers', headers)
console.log('data', decodedJson)
}

A Form POST request, read the response body as text:

const { request } = require('undici')
async function postFormRequest (port = 3001) {
// Make a URL-encoded form POST request:
const qs = require('node:querystring')

const requestBody = {
hello: 'URL Encoded Example body'
}

const {
statusCode,
headers,
body
} = await request(
`http://localhost:${port}/form`,
{ method: 'POST', headers: { 'content-type': 'application/x-www-form-urlencoded' }, body: qs.stringify(requestBody) }
)

const data = await body.text()
console.log('response received', statusCode)
console.log('headers', headers)
console.log('data', data)
}

A FormData request with file stream, read the response body as text

const { request } = require('undici')
const { openAsBlob } = require('fs')

async function formDataBlobRequest () {
// Make a FormData request with file stream:

const formData = new FormData()
formData.append('field', 42)
formData.set('file', await openAsBlob('./index.mjs'))

const response = await request('http://127.0.0.1:3000', {
method: 'POST',
body: formData
})
console.log(await response.body.text())

const data = await body.text()
console.log('response received', statusCode)
console.log('headers', headers)
console.log('data', data)
}

A DELETE request

const { request } = require('undici')
async function deleteRequest (port = 3001) {
// Make a DELETE request
const {
statusCode,
headers,
body
} = await request(
`http://localhost:${port}/something`,
{ method: 'DELETE' }
)

console.log('response received', statusCode)
console.log('headers', headers)
// For a DELETE request we expect a 204 response with no body if successful, in which case getting the body content with .json() will fail
if (statusCode === 204) {
console.log('delete successful')
// always consume the body if there is one:
await body.dump()
} else {
const data = await body.text()
console.log('received unexpected data', data)
}
}

Cacheable DNS Lookup

Using CacheableLookup to cache DNS lookups in undici

import { Agent } from 'undici'
import CacheableLookup from 'cacheable-lookup';

const cacheable = new CacheableLookup(opts)

const agent = new Agent({
connect: { lookup: cacheable.lookup }
})