@ingestkorea/util-http-handler
TypeScript icon, indicating that this package has built-in type declarations

1.1.1 • Public • Published

@ingestkorea/util-http-handler

npm (scoped) npm downloads

An internal package

You probably shouldn't, at least directly.

Description

INGESTKOREA Utility HTTP Handler for Node.js.

Installing

npm install @ingestkorea/util-http-handler

Getting Started

Pre-requisites

  • Use TypeScript v4.x
  • Includes the TypeScript definitions for node.
    npm install -D @types/node # save dev mode
  • Includes the @ingestkorea/util-error-handler.
    npm install @ingestkorea/util-error-handler

Import

import { IngestkoreaError, ingestkoreaErrorCodeChecker } from '@ingestkorea/util-error-handler';
import {
    NodeHttpHandler, HttpRequest, HttpResponse,
    collectBodyString, destroyStream
} from '@ingestkorea/util-http-handler';

Usage

Create Node Http Handler

const httpHandler = new NodeHttpHandler({
    connectionTimeout: 3000,
    socketTimeout: 3000
});

Set Response Body Handler

const verifyJsonHeader = async (contentType: string, streamBody: any): Promise<void> => {
  const isValid = /application\/json/gi.exec(contentType) ? true : false;
  if (!isValid) {
    destroyStream(streamBody);
    throw new IngestkoreaError({
      code: 400, type: 'Bad Request',
      message: 'Invalid Request', description: 'response content-type is not applicaion/json'
    });
  };
  return;
};

const parseBody = async (output: HttpResponse): Promise<any> => {
  const { headers, body: streamBody } = output;
  await verifyJsonHeader(headers['content-type'], streamBody);

  const data = await collectBodyString(streamBody);
  if (data.length) return JSON.parse(data);
  return {};
};

const parseErrorBody = async (output: HttpResponse): Promise<void> => {
  const { statusCode, headers, body: streamBody } = output;
  await verifyJsonHeader(headers['content-type'], streamBody);

  const data = await collectBodyString(streamBody);
  let customError = new IngestkoreaError({ code: 400, type: 'Bad Request', message: 'Invalid Request' });

  if (ingestkoreaErrorCodeChecker(statusCode)) customError.error.code = statusCode
  if (data.length) customError.error.description = JSON.parse(data)
  throw customError;
};

Set Serialize, Deserialize command

const serialize_command_01 = async () => {
  return new HttpRequest({
    protocol: 'https:',
    method: 'GET',
    hostname: 'api.hello-world.com',
    path: '/userInfo',
    query: {
      id: '12345'
    },
  });
};

const deserialize_command_01 = async (output: HttpResponse): Promise<any> => {
  if (output.statusCode >= 300) await parseErrorBody(output);
  let content = await parseBody(output);
  return content;
};

Async/await

(async () => {
  try {
    let request = await serialize_command_01();
    let { response } = await httpHandler.handle(request);
    let output = await deserialize_command_01(response);
    console.log(output)
  } catch (err) {
    console.log(err);
  };
})();

License

This Utility is distributed under the MIT License, see LICENSE for more information.

Readme

Keywords

none

Package Sidebar

Install

npm i @ingestkorea/util-http-handler

Weekly Downloads

2

Version

1.1.1

License

MIT

Unpacked Size

36.2 kB

Total Files

48

Last publish

Collaborators

  • ingestkorea