Skip to content

japple-jnode/request

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JustRequest

Simple HTTP(s) package for Node.js.

Installation

npm install @jnode/request

Usage

Import JustRequest

const { request, multipartRequest, generateMultipartBody, RequestResponse } = require('@jnode/request');

Making a request

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();

Sending data with the request

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();

Generating a multipart/form-data body

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();

Making a multipart request

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();

Functions

request(method, url, headers = {}, body)

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.

About

Simple HTTP(s) package for Node.js.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published