/lanza

Launch-ready server tools to create APIs

Primary LanguageTypeScriptMIT LicenseMIT

Lanza

CI

Lanza is a launch-ready server tools package to create APIs

Server

import { Server } from 'lanza';

const server = new Server();
await server.start();

Without any configuration this server already has:

  • Initialized in the 8000 port
  • /health endpoint
  • 404 errors
  • Error handler (no app crashes)
  • Disabled x-powered-by header
  • Incoming JSON requests parsed
  • CORS

Installation

You will have to install the lanza package:

npm install lanza

Options

Option Default Description
hostname Hostname for the API
port 8000 Port to access the API
cors true CORS enabled to accept requests from anywhere
versions [] API versions. Check below for more details
healthCheck null Custom /health endpoint response
error404 null Custom 404 error response
maxBodySize 200mb Max body size the API can receive
rawBody false Option to store the unparsed request in req.rawBody
logger null Custom logger to log errors
appMiddlewares null Express' application-level middlewares

Versions

You can use various API versions in Lanza. You have to pass the array of versions to the versions option of the server.

Option Description
path Path for the versions (e.g. /v1)
routes Array of routes. Check below for more details
middlewares Array of conditional middlewares for the routes. Check below for more details

Routes

Option Description
path Path of the resource without the version path (e.g. /users)
method Method of the request (e.g. post)
handler Function that will handle the request
dto Function that will get your response and transform it before returning it to the client

Middlewares

Option Description
condition Function to check if the path fulfills the condition to execute the middleware
handler Function that will act as a middleware

Note: The order of the middlewares matter

Responses

There is no need to use res.status(200).send(...) anymore (although you still can).

You can directly return booleans, text, and objects and Lanza will handle the responses for you:

Type Response
boolean { "success": true } or { "success": false }
string Will return the string
JSON Will return the JSON with its content type

Errors

If an error occurs and it is thrown, Lanza will return the error in a specific format:

{
  "error": {
    "message": "Custom error message"
  }
}

Example

import { Server } from 'lanza';

const server = new Server({
  port: 8008,
  rawBody: true,
  versions: [
    {
      path: '/v1',
      middlewares: [
        {
          condition: (route) => !!route.executeMiddleware,
          handler: (req, _res, next) => {
            req.middlewareExecuted = true;
            next();
          }
        }
      ],
      routes: [
        {
          method: 'get',
          path: '/test',
          executeMiddleware: true,
          handler: (req) => {
            console.log(req.middlewareExecuted);
            return true;
          }
        }
      ],
    }
  ]
});

await server.start();

Making a request to /test would log a true and the client would receive a { "success": true }