# centra

> The core lightweight HTTP client for Node

Latest version **2.7.0** (published 2024-04-11) · MIT license · 0 weekly downloads

## Install

```sh
npm install centra
pnpm add centra
yarn add centra
bun add centra
```

## Health

**Score 23/100 (F)** — status: abandoned.

Positive: has types package; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.7.0 |
| Published | 2024-04-11 |
| First published | 2018-09-18 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | separate (@types/centra) |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 10.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Ethan Davis |
| Maintainers | ethan_ |
| Keywords | http, https, request, fetch, url, lightweight |

## Links

- npm: https://www.npmjs.com/package/centra
- Repository: https://github.com/ethanent/centra
- Issues: https://github.com/ethanent/centra/issues
- npm.io page: https://npm.io/package/centra

## Dependencies (1)

- [follow-redirects](https://npm.io/package/follow-redirects.md) ^1.15.6

## Alternatives

- [launchdarkly-js-client-sdk](https://npm.io/package/launchdarkly-js-client-sdk.md) — 2.5M weekly downloads
- [@elastic/elasticsearch](https://npm.io/package/@elastic/elasticsearch.md) — 2.1M weekly downloads
- [@c8y/client](https://npm.io/package/@c8y/client.md) — 15.3K weekly downloads
- [@signaldb/maverickjs](https://npm.io/package/@signaldb/maverickjs.md) — 1.7K weekly downloads
- [@bbc/http-transport-cache](https://npm.io/package/@bbc/http-transport-cache.md) — 1.2K weekly downloads

## Recent versions

- 2.7.0 (latest) — 2024-04-11
- 2.6.0 — 2022-11-19
- 2.5.0 — 2021-07-17
- 2.4.2 — 2020-06-11
- 2.4.1 — 2020-06-11
- 2.4.0 — 2019-08-20
- 2.3.0 — 2019-06-02
- 2.2.2 — 2019-01-04
- 2.2.1 — 2019-01-01
- 2.2.0 — 2018-11-16
- 2.1.0 — 2018-10-07
- 2.0.2 — 2018-09-28
- 2.0.1 — 2018-09-23
- 2.0.0 — 2018-09-22
- 1.0.1 — 2018-09-18
- … 1 more at https://npm.io/package/centra/versions

## README

<p align="center" style="text-align: center;"><img src="https://github.com/ethanent/centra/blob/master/media/centraLogo.png?raw=true" width="400"/></p>

> The core lightweight HTTP client for Node

[GitHub](https://github.com/ethanent/centra) | [NPM](https://npmjs.com/package/centra)

## Install

```shell
npm i centra
```

## Why centra?

centra is the best request library for developers; it provides a number of extremely useful features while still being one of the most lightweight Node.js HTTP client libraries available.

## Use centra!

First, require the library.

```js
const c = require('centra')
```

Then let's make a request in an async function!

```js
;(async () => {
	const res = await c('https://example.com').send()

	console.log(await res.text())
})()
```

## More advanced usage

### Send data in a JSON body

```js
c('https://example.com/nonexistentJSONAPI', 'POST').body({
	'name': 'Ethan'
}, 'json').send().then((res) => {
	/*...*/
})
```

### Send data in a form body

```js
c('https://example.com/nonexistentJSONAPI', 'POST').body({
	'name': 'Ethan'
}, 'form').send().then((res) => {
	/*...*/
})
```

### Set query string parameters

One at a time:

```js
c('https://example.com/user').query('id', 'u1817760').send().then((res) => {
	/*...*/
})
```

Many at a time:

```js
c('https://example.com/user').query({
	'id', 'u1817760',
	'name': 'Ethan'
}).send().then((res) => {
	/*...*/
})
```

### Set a request timeout

```js
c('https://example.com').timeout(2000).send().then((res) => {
	// Success!
}).catch((err) => {
	// Has the request timed out?
})
```

### Stream a request's response

In this example, the [stream](https://nodejs.org/api/stream.html) is piped to a file:

```js
// require the fs module beforehand

c('https://example.com').stream().send().then((stream) => stream.pipe(fs.createWriteStream(path.join(__dirname, 'logo.png'))))
```

### Follow redirects

```js
c('https://example.com/').followRedirects(5).send()
```

### Switch paths on the fly

```js
c('https://example.com/test').path('/hello').send()

// This will make a request to https://example.com/test/hello
```

### Specify request headers

One at a time:

```js
c('https://example.com').header('Content-Type', 'application/json').send()
```

Many at a time:

```js
c('https://example.com').header({
	'Content-Type': 'application/json',
	'X-Connecting-With': 'centra'
}).send()
```

### Modify core HTTP request options

See [http.request](https://nodejs.org/dist/latest-v10.x/docs/api/http.html#http_http_request_url_options_callback)'s options for more information about core HTTP request options.
Let's change our localAddress as an example.

```js
c('https://example.com').option('localAddress', '127.0.0.2').send()
```

### Accept compressed responses

```js
c('https://example.com').compress().send()

// This will cause centra to accept compressed content from the server. (gzip and deflate are currently supported)
```

---
_Source: https://npm.io/package/centra · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
