npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

bent

v7.3.12

Published

Functional HTTP client for Node.js w/ async/await.

Downloads

1,411,115

Readme

bent

2377 1106

Functional HTTP client for Node.js and Browsers with async/await.

Incredibly small browser version built on fetch with no external dependencies or polyfills.

Usage

const bent = require('bent')

const getJSON = bent('json')
const getBuffer = bent('buffer')

let obj = await getJSON('http://site.com/json.api')
let buffer = await getBuffer('http://site.com/image.png')

As you can see, bent is a function that returns an async function.

Bent takes options which constrain what is accepted by the client. Any response that falls outside the constraints will generate an error.

You can provide these options in any order, and Bent will figure out which option is which by inspecting the option's type and content.

const post = bent('http://localhost:3000/', 'POST', 'json', 200);
const response = await post('cars/new', {name: 'bmw', wheels: 4});

If you don't set a response encoding ('json', 'string' or 'buffer') then the native response object will be returned after the statusCode check.

In Node.js, we also add decoding methods that match the Fetch API (.json(), .text() and .arrayBuffer()).

const bent = require('bent')

const getStream = bent('http://site.com')

let stream = await getStream('/json.api')
// status code
stream.status // 200
stream.statusCode // 200
// optionally decode
const obj = await stream.json()
// or
const str = await stream.text()

The following options are available.

  • HTTP Method: 'GET', 'PUT', or any other ALLCAPS string will be used to set the HTTP method. Defaults to 'GET'.
  • Response Format: Available formats are 'string', 'buffer', and 'json'. By default, the response object/stream will be returned instead of a decoded response. Browser returns ArrayBuffer instead of Buffer.
  • Status Codes: Any number will be considered an acceptable status code. By default, 200 is the only acceptable status code. When any status codes are provided, 200 must be included explicitly in order to be acceptable.
  • Headers: An object can be passed to set request headers.
  • Base URL: Any string that begins with 'https:' or 'http:' is considered the Base URL. Subsequent queries need only pass the remaining URL string.

The returned async function is used for subsequent requests.

When working with Binary this library uses different types in the browser and Node.js. In Node.js all binary must be done using the Buffer type. In the browser you can use ArrayBuffer or any ArrayBuffer view type (UInt8Array, etc).

async request(url[, body=null, headers={}])

  • url: Fully qualified URL to the remote resource, or in the case that a base URL is passed the remaining URL string.
  • body: Request body. Can be a string, a stream (node.js), a buffer (node.js) (see note below), an ArrayBuffer (browser), or a JSON object.
  • headers: An object of any headers you need to set for just this request.
const bent = require('bent')

const put = bent('PUT', 201)
await put('http://site.com/upload', Buffer.from('test'))

Or

const bent = require('bent')

const put = bent('PUT', 201, 'http://site.com')
await put('/upload', Buffer.from('test'))

NOTE: If the body is passed as an object, it will be treated as JSON, stringified and the Content-Type will be set to application/json unless already set. A common requirement is to POST using form-urlencoded. This will require you to set the Content-Type header to application/x-www-form-urlencoded and to encode the body yourself, perhaps using form-urlencoded.