Skip to content

A lightweight, promise-based HTTP client wrapper built on Axios, providing a clean and consistent interface for GET, POST, PUT, and DELETE requests with centralized error handling and optional structured logging support.

Notifications You must be signed in to change notification settings

morphsync/http-request

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

@morphsync/http-request

A lightweight HTTP client wrapper built on Axios with automatic error logging support.

npm version License: ISC

Features

  • 🚀 Built on Axios for reliable HTTP requests
  • 📝 Automatic error logging with @morphsync/logger
  • đź”§ Support for custom headers
  • 📦 JSON content-type by default
  • ⚡ Promise-based API
  • 🎯 TypeScript-friendly

Installation

npm install @morphsync/http-request

Optional: Install Logger for Error Logging

npm install @morphsync/logger

Quick Start

const HttpRequest = require('@morphsync/http-request');

const api = new HttpRequest('https://api.example.com');

// GET request
const users = await api.getRequest('/users');

// POST request
const newUser = await api.postRequest('/users', {
    name: 'John Doe',
    email: 'john@example.com'
});

// PUT request
const updated = await api.putRequest('/users/1', {
    name: 'Jane Doe'
});

// DELETE request
const deleted = await api.deleteRequest('/users/1');

Usage

Basic Usage

const HttpRequest = require('@morphsync/http-request');

const httpRequest = new HttpRequest(process.env.API_URL);

try {
    const response = await httpRequest.getRequest('/endpoint');
    console.log(response);
} catch (error) {
    console.error('Request failed:', error.message);
}

With Custom Headers

const httpRequest = new HttpRequest('https://api.example.com');

// GET with authentication
const data = await httpRequest.getRequest('/protected', {
    'Authorization': 'Bearer your-token-here'
});

// POST with custom headers
const result = await httpRequest.postRequest(
    '/data',
    { key: 'value' },
    {
        'Authorization': 'Bearer your-token-here',
        'X-Custom-Header': 'custom-value'
    }
);

With Automatic Error Logging

When @morphsync/logger is installed, errors are automatically logged to files:

const HttpRequest = require('@morphsync/http-request');
// @morphsync/logger is automatically detected if installed

const httpRequest = new HttpRequest('https://api.example.com');

try {
    const data = await httpRequest.getRequest('/users');
} catch (error) {
    // Error is automatically logged to: log/YYYY/MM/DD/request/error.log
    console.error('Request failed:', error.message);
}

Express.js Controller Example

const HttpRequest = require('@morphsync/http-request');
const Logger = require('@morphsync/logger');

class UserController {
    static async getUsers(req, res) {
        const logger = new Logger();
        const api = new HttpRequest(process.env.API_URL);

        try {
            const users = await api.getRequest('/users');
            logger.write('Users fetched successfully', 'api/info');
            res.json({ success: true, data: users });
        } catch (error) {
            logger.write(`Error fetching users: ${error.message}`, 'api/error');
            res.status(500).json({ success: false, error: 'Failed to fetch users' });
        }
    }
}

module.exports = UserController;

Multiple API Instances

const HttpRequest = require('@morphsync/http-request');

// Different API endpoints
const userApi = new HttpRequest('https://users-api.example.com');
const paymentApi = new HttpRequest('https://payments-api.example.com');
const analyticsApi = new HttpRequest('https://analytics-api.example.com');

// Use independently
const users = await userApi.getRequest('/users');
const payments = await paymentApi.getRequest('/transactions');
const stats = await analyticsApi.getRequest('/stats');

API Reference

Constructor

new HttpRequest(baseURL)

Creates a new HTTP client instance.

Parameters:

  • baseURL (string): The base URL for all HTTP requests

Example:

const api = new HttpRequest('https://api.example.com');

Methods

getRequest(endpoint, headers)

Sends a GET request.

Parameters:

  • endpoint (string): API endpoint path
  • headers (object, optional): Custom headers

Returns: Promise

Example:

const data = await api.getRequest('/users', {
    'Authorization': 'Bearer token'
});

postRequest(endpoint, data, headers)

Sends a POST request.

Parameters:

  • endpoint (string): API endpoint path
  • data (object): Request body data
  • headers (object, optional): Custom headers

Returns: Promise

Example:

const result = await api.postRequest('/users', {
    name: 'John',
    email: 'john@example.com'
});

putRequest(endpoint, data, headers)

Sends a PUT request.

Parameters:

  • endpoint (string): API endpoint path
  • data (object): Request body data
  • headers (object, optional): Custom headers

Returns: Promise

Example:

const updated = await api.putRequest('/users/1', {
    name: 'Jane'
});

deleteRequest(endpoint, headers)

Sends a DELETE request.

Parameters:

  • endpoint (string): API endpoint path
  • headers (object, optional): Custom headers

Returns: Promise

Example:

const deleted = await api.deleteRequest('/users/1');

Error Handling

All methods throw errors that can be caught with try-catch:

try {
    const data = await api.getRequest('/endpoint');
} catch (error) {
    if (error.response) {
        // Server responded with error status
        console.error('Status:', error.response.status);
        console.error('Data:', error.response.data);
    } else if (error.request) {
        // Request made but no response
        console.error('No response received');
    } else {
        // Error setting up request
        console.error('Error:', error.message);
    }
}

Dependencies

  • axios - Promise based HTTP client

Optional Dependencies

License

ISC

Author

Morphsync

Related Packages

Support

For issues and questions, please visit the GitHub repository.

About

A lightweight, promise-based HTTP client wrapper built on Axios, providing a clean and consistent interface for GET, POST, PUT, and DELETE requests with centralized error handling and optional structured logging support.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published