Skip to content
This repository has been archived by the owner on Nov 22, 2020. It is now read-only.

MrAugu/response-builder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

response-body-builder

Response Builder is a middleware that helps build you response bodies for APIs.

Installation

npm install response-body-builder

Usage

Basic Usage

const { ResponseBuilder, ResponseBuilderMiddleware } = require("response-body-builder");
const express = require("express");
const app = express();

app.use(ResponseBuilderMiddleware);

app.get("/ping", (req, res) => {
  const response = new ResponseBuilder()
    .set("ping", "Pong!");
  res.sendResponse(response);
  // {
  //   "ping": "Pong!",
  //   "httpCode": 200,
  //   "httpCodeMessage": "Successful."
  // }
});

Advanced Usage Example

const { ResponseBuilder } = require("response-body-builder");
const wait = require("util").promisify(setTimeout);

(async function () {
  const response = await (
    new ResponseBuilder()
      .set("test", "hello")
      .setPromise("bool", fakePromiseValue(500))
      .mergePromise(fakePromiseObject(200))
      .setCode(500)
      .cast()
  );

  const syncResponse = new ResponseBuilder()
    .set("test", "hello")
    .setPromise("bool", fakePromiseValue(500))
    .mergePromise(fakePromiseObject(200))
    .setCode(500)
    .castSync();

  console.log(response);
  console.log(syncResponse); // Ignore everything promise-related.
  
  // Output:
  // {
  //   test: 'hello',
  //   httpCode: 500,
  //   httpCodeMessage: 'Internal server error.',
  //   bool: false,
  //   two: 2,
  //   four: 4
  // }
  // {
  //   test: 'hello',
  //   httpCode: 500,
  //   httpCodeMessage: 'Internal server error.'
  // }
}());

async function fakePromiseValue (time) {
  await wait(time);
  return (Math.random() * 100 < 50 ? true : false);
}

async function fakePromiseObject (time) {
  await wait(time);
  return {
    two: 2,
    four: 4
  }
}

Documentation

  1. .set(key, value) (Returns this)

Adds key-value pair to the body object.

  1. .setAsync(key, promise) (Returns this)

Starts to resolve the promise right away ,without adding it to queue, once done, it adds it to the body object as a key-value pair.

If promise doesn't resolve until .cast() or .castSync() are called, the result of the promise will not be included into the body object, not recommended to use.

  1. .mergePromise(promise) (Returns this)

Queues the promise into the mergePromises queue. (Upon .cast() all the promises queued are resolved and their value properties are merged into the body object.)

  1. .setPromise(key, promise) (Returns this)

Queues the promise into the keyPromises queue. (Upon .cast() all promises queued are resolved and added to the body object as a key-resovled value pair.)

  1. .merge(object) (Returns this)

Copies all of the properties of object into the body object.

  1. .cast([useCode] = true) (Returns Promise<Object>)

useCode whether or not the status code and the message relevant to it to be inserted into the body object.

Resolves all of the promise queues into the body object and returns it.

  1. .castSync([useCode = true]) (Return Object)

useCode whether or not the status code and the message relevant to it to be inserted into the body object.

Returns the body object, skipping to resolve any of the queues.

  1. .setCode(httpCode[, message])

Sets the status code of the request. If message is not provided, the default message for the will be used for supported codes (or undefined for non-supported status codes).

  1. Supported Http Code Messages
"HTTP_200": "Successful.",
"HTTP_204": "No content.",
"HTTP_400": "Bad request.",
"HTTP_401": "Unauthorized.",
"HTTP_403": "Forbidden.",
"HTTP_404": "Not found.",
"HTTP_429": "Too many requests.",
"HTTP_500": "Internal server error.",
"HTTP_503": "Service unavailable."

About

Response Builder is a middleware that helps build you response bodies for APIs.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published