What is teeny-request?
The teeny-request npm package is a lightweight HTTP client designed to be a minimalistic wrapper around the native http and https modules in Node.js. It is used to make HTTP requests from Node.js applications with a simple and easy-to-use API.
What are teeny-request's main functionalities?
Simple HTTP GET requests
This feature allows you to perform a simple HTTP GET request to retrieve data from a specified URL.
const teenyRequest = require('teeny-request');
teenyRequest('http://example.com', (error, response, body) => {
if (!error && response.statusCode == 200) {
console.log(body);
}
});
HTTP POST requests with JSON body
This feature allows you to perform an HTTP POST request with a JSON body to send data to a server.
const teenyRequest = require('teeny-request');
teenyRequest({
method: 'POST',
uri: 'http://example.com/api/data',
body: { key: 'value' },
json: true
}, (error, response, body) => {
if (!error && response.statusCode == 200) {
console.log(body);
}
});
Custom headers and other options
This feature allows you to customize the headers and other options for your HTTP request.
const teenyRequest = require('teeny-request');
teenyRequest({
method: 'GET',
uri: 'http://example.com',
headers: {
'User-Agent': 'My-Custom-User-Agent'
}
}, (error, response, body) => {
if (!error && response.statusCode == 200) {
console.log(body);
}
});
Other packages similar to teeny-request
axios
Axios is a promise-based HTTP client for the browser and Node.js. It provides a more feature-rich API compared to teeny-request, including interceptors, automatic transforms for JSON data, and client-side protection against XSRF.
got
Got is a human-friendly and powerful HTTP request library for Node.js. It supports streams, promises, and provides a wealth of options for customizing requests. It is more advanced and feature-rich than teeny-request.
node-fetch
node-fetch is a light-weight module that brings the Fetch API to Node.js. It is similar to teeny-request in terms of being minimalistic but is designed to closely mimic the browser fetch API.
request
Request is a simplified HTTP request client that is similar to teeny-request but has been deprecated. It was once one of the most popular HTTP client libraries in the Node.js ecosystem.
superagent
Superagent is a small progressive client-side HTTP request library, and Node.js module with the same API, sporting many high-level HTTP client features. It is more feature-rich than teeny-request, with a fluent API that allows chaining of requests.
teeny-request
Like request
, but much smaller - and with less options. Uses node-fetch
under the hood.
Pop it in where you would use request
. Improves load and parse time of modules.
const request = require('teeny-request').teenyRequest;
request({uri: 'http://ip.jsontest.com/'}, function (error, response, body) {
console.log('error:', error);
console.log('statusCode:', response && response.statusCode);
console.log('body:', body);
});
For TypeScript, you can use @types/request
.
import {teenyRequest as request} from 'teeny-request';
import * as r from 'request';
request({uri: 'http://ip.jsontest.com/'}, (error: any, response: r.Response, body: any) => {
console.log('error:', error);
console.log('statusCode:', response && response.statusCode);
console.log('body:', body);
});
teenyRequest(options, callback)
Options are limited to the following
- uri
- method, default GET
- headers
- json
- qs
- useQuerystring
- timeout in ms
- gzip
- proxy
request({uri:'http://service.com/upload', method:'POST', json: {key:'value'}}, function(err,httpResponse,body){ })
The callback argument gets 3 arguments:
- An error when applicable (usually from http.ClientRequest object)
- A response object with statusCode, a statusMessage, and a body
- The third is the response body (JSON object)
defaults(options)
Set default options for every teenyRequest
call.
let defaultRequest = teenyRequest.defaults({timeout: 60000});
defaultRequest({uri: 'http://ip.jsontest.com/'}, function (error, response, body) {
assert.ifError(error);
assert.strictEqual(response.statusCode, 200);
console.log(body.ip);
assert.notEqual(body.ip, null);
done();
});
Proxy environment variables
If environment variables HTTP_PROXY
, HTTPS_PROXY
, or NO_PROXY
are set, they are respected.
Building with Webpack 4+
Since 4.0.0, Webpack uses javascript/esm
for .mjs
files which handles ESM more strictly compared to javascript/auto
. If you get the error Can't import the named export 'PassThrough' from non EcmaScript module
, please add the following to your Webpack config:
{
test: /\.mjs$/,
type: 'javascript/auto',
},
Motivation
request
has a ton of options and features and is accordingly large. Requiring a module incurs load and parse time. For
request
, that is around 600ms.
teeny-request
doesn't have any of the bells and whistles that request
has, but is so much faster to load. If startup time is an issue and you don't need much beyond a basic GET and POST, you can use teeny-request
.
Thanks
Special thanks to billyjacobson for suggesting the name. Please report all bugs to them. Just kidding. Please open issues.