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

Latest commit

 

History

History
64 lines (56 loc) · 2.26 KB

readme.md

File metadata and controls

64 lines (56 loc) · 2.26 KB

express

A concrete implementation of js-entity-repos for express.

Usage

  1. Install it with npm i @js-entity-repos/express.
  2. For each entity you will need to do the following.
    1. Create an Entity interface.
    2. Construct the facade.
    3. Use the facade.

Note that you'll probably want to use this with the Axios implementation of js-entity-repos.

Entity Interface

import Entity from '@js-entity-repos/core/dist/types/Entity';

export interface TodoEntity extends Entity {
  readonly description: string;
  readonly completed: boolean;
}

Construct the Facade

import factory from '@js-entity-repos/express/dist/factory';

const todosFacade = factory<TodoEntity>({
  // Optional property to convert an entity to a response body. Defaults to the function below.
  constructDocument: ({ entity, req, res }) => {
    return entity;
  },
  // Optional property to convert a request body to an entity. Defaults to the function below.
  constructEntity: ({ document, req, res }) => {
    return document;
  },
  // Optional property that modifies a filter for the service.
  constructFilter: ({ filter, req, res }) => {
    return filter;
  },
  // Optional property to convert a request body to a patch. Defaults to the function below.
  constructPatch: ({ document, req, res }) => {
    return document;
  },
  // Optional property. Defaults to 10.
  defaultPaginationLimit: 10,
  // Optional property to handle transactions. Defaults to "utils/handleTransaction".
  handleTransaction: async ({ req, res }, handler) => {
    // The transactionId allow items found in logs to be matched with responses to users.
    const transactionId = uuid();
    try {
      // This executes the Express request/response handler for a particular route.
      // Avoid changing behaviour here for certain routes, create a Github issue and we can discuss your use case.
      await handler({ transactionId });
    } catch (err) {
      // The default handleTransaction uses "utils/handleError" here.
      console.error({ err, req, res, transactionId})
      res.status(500).send(transactionId);
    }
  };
  service,
});