@jnode/request
Version:
Simple HTTP(s) package for Node.js.
173 lines (132 loc) • 4.95 kB
Markdown
Simple HTTP(s) package for Node.js.
## Installation
```shell
npm install @jnode/request
```
## Usage
### Import JustRequest
```javascript
const { request, multipartRequest, generateMultipartBody, RequestResponse } = require('@jnode/request');
```
```javascript
async function fetchData() {
try {
const response = await request('GET', 'https://example.com/api/data');
console.log('Status Code:', response.statusCode);
console.log('Body:', response.text()); // Use response.json() if expecting a JSON response
} catch (error) {
console.error('Request failed:', error);
}
}
fetchData();
```
```javascript
async function postData() {
try {
const headers = {
'Content-Type': 'application/json'
};
const body = JSON.stringify({ key: 'value' });
const response = await request('POST', 'https://example.com/api/post', headers, body);
console.log('Status Code:', response.statusCode);
console.log('Response:', response.text());
} catch (error) {
console.error('Request failed:', error);
}
}
postData();
```
```javascript
const fs = require('fs');
async function uploadFile() {
const fileData = await fs.promises.readFile('./example.txt');
const parts = [{
disposition: 'form-data; name="file"; filename="example.txt"',
contentType: 'text/plain',
data: fileData
}, {
disposition: 'form-data; name="key"',
data: 'value'
}];
const body = generateMultipartBody(parts);
const headers = {
'Content-Type': 'multipart/form-data; boundary=----JustNodeFormBoundary'
};
try {
const response = await request('POST', 'https://example.com/api/upload', headers, body);
console.log('Status Code:', response.statusCode);
console.log('Response:', response.text());
} catch (error) {
console.error('Request failed:', error);
}
}
uploadFile();
```
```javascript
const fs = require('fs');
async function uploadFile() {
const fileStream = fs.createReadStream('./example.txt');
const parts = [{
disposition: 'form-data; name="file"; filename="example.txt"',
stream: fileStream
}, {
disposition: 'form-data; name="key"',
data: 'value'
}];
const headers = {
'X-Custom-Header': 'custom value'
};
try {
const response = await multipartRequest('POST', 'https://example.com/api/upload', headers, parts);
console.log('Status Code:', response.statusCode);
console.log('Response:', response.text());
} catch (error) {
console.error('Request failed:', error);
}
}
uploadFile();
```
Makes an HTTP(S) request.
- `method`: HTTP method (`GET`, `POST`, `PUT`, `DELETE`, etc.).
- `url`: The request URL.
- `headers`: An object containing request headers. Defaults to an empty object.
- `body`: The request body (string or Buffer).
**Returns:** A Promise that resolves to a `RequestResponse` object.
### `multipartRequest(method, url, headers, parts, options)`
Makes an HTTP(S) multipart/form-data request.
- `method`: HTTP method (`POST`, `PUT`, etc.).
- `url`: The request URL.
- `headers`: An object containing request headers.
- `parts`: An array of objects, where each object represents a part of the form data.
- `disposition` (Optional): Content disposition.
- `type` (Optional): Content type of the data. Defaults to `application/octet-stream`.
- `data`: Data (string or Buffer) of this part.
- `file` (Optional): Path to a local file for streaming.
- `base64` (Optional): base64 encoded data string.
- `stream` (Optional): Any readable stream.
- `options`: Other options.
**Returns:** A Promise that resolves to a `RequestResponse` object.
### `generateMultipartBody(parts = [])`
Generates the body for a `multipart/form-data` request.
- `parts`: An array of objects, where each object represents a part of the form data.
- `disposition` (Optional): Content disposition.
- `contentType` (Optional): Content type of the data. Defaults to `application/octet-stream`.
- `data`: Data (string or Buffer) of this part.
- `encoded` (Optional): If provided, the data is already base64 encoded, you may skip the default base64 encoding.
**Returns:** A string representing the multipart body.
## Class `RequestResponse`
A class representing the response from an HTTP(S) request.
### Properties
- `statusCode`: The HTTP status code of the response.
- `headers`: An object containing the response headers.
- `body`: The raw response body (Buffer).
### Methods
- `text(encoding = 'utf8')`: Returns the response body as a string with optional encoding.
- `json()`: Attempts to parse the response body as JSON. Returns a JSON object or `undefined` if parsing fails.