api-helper-modules

A package with support for different api common modules

Usage no npm install needed!

<script type="module">
  import apiHelperModules from 'https://cdn.skypack.dev/api-helper-modules';
</script>

README

api-helper-modules

A collection of reusable modules for the nodejs and typescript.

Features

  • Reusable runtime error types with predefined standard error status code.
  • Error types currently suppored are :
    • BadRequestError : Any malformed request syntax, missing headers, malformed data sent etc.
    • InternalServerError : Any unexpected conditions at the server. Database operations, runtime exceptions are some of the examples.
    • UnauthorizedError : Use case when required permissions are invalid or missing.
    • ResourceNotFoundError : Error occured when specific records, resources are missing.
    • InvalidParameterError : Error which occurs when required data are missing in the request.

Installation

$ npm install api-helper-modules

Import using commonjs

// import specific error classes.
const BadRequestError = require('api-helper-modules').BadRequestError;
const UnauthorizedError = require('api-helper-modules').UnauthorizedError;

// import the module itself.
const err = required('api-helper-modules');

Import using ES6 modules

import { BadRequestError, CustomError } from 'api-helper-modules';

Example

This example tries to get the ToDo data from https://jjsonplaceholder.typicode.com/todos/. The code tries to JSON parse the already parsed data which will raise an error. In this case, InternalServerError is used to handle the use case. It also shows the use of BadRequestError for the missing todoId.

const axios = require('axios');
const errModule = require('api-helper-modules');

async function getToDo(todoId) {
    try {
        if (todoId === null || todoId === undefined) {
            throw new errModule.BadRequestError("Missing ToDo Id.");
        }
        // Invalid Url
        const url = `https://jsonplaceholder.typicode.com/todos/${todoId}`;
        const response = await requestData(url);
        return { success: true, data: response }

    } catch (error) {
        if (error instanceof (errModule.InternalServerError)) {
            // Handle the InternalServerError differently;
            return {
                success: false,
                status_code: error.statusCode
            }
        }
        else if (error instanceof (errModule.CustomError)) {
            // Handle other types of Custom Error.
            return {
                success: false,
                status_code: error.statusCode
            }
        }
        else {
            return {
                success: false,
                status_code: 500
            }
        }
    }
}

async function requestData(url){
    return axios.get(url)
        .then(response => {
            // Trying to parse the JSON data.
            return JSON.parse(response.data);
        })
        .catch(err => {
            throw new errModule.InternalServerError("Server Error");
        })
}

getToDo('1')
    .then(response => console.log(response));

Tests

npm run test