1.3.5 • Published 10 months ago

neura-express-app v1.3.5

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

Description

Basic Express application starter with some common utilities.

Features

  • Error handler - Handle application errors
  • Logger - Basic Bunyan logger
  • Container - Basic singleton container which can be used to set or get services and any kind of values across application
  • Non-Existing route protection / middleware - Returns 404 on routes which are not registered
  • API error handlers / middleware - If error is returned on next() function, it will be handled by this middleware. Besides regular API errors, can handle ValidationErrors as well
  • Gracefully shutting down Express server

Example

api.controller.ts

import {NeuraController} from "neura-express-app"
import express, {Request, Response} from "express"

export class ApiController extends NeuraController {
  public getRouterPrefix(): string | undefined {
    return "/api"
  }

  public getRouter(): express.Router {
    const router = express.Router()

    router.get("/", [this.index.bind(this)])

    return router
  }

  protected index(req: Request, res: Response) {
    const someValue = this.container.get<string>("some_value")
    this.logger.info(`Some value: ${someValue}`)
    res.send("Hello world")
  }
}

index.ts

import dotenv from "dotenv"

// Load env variables
dotenv.config()

// Import everything we need from NeuraApp module
import cors from "cors"
import helmet from "helmet"
import bodyParser from "body-parser"
import {
  NeuraApp,
  getAppConfig,
  NeuraContainer,
  INeuraContainer,
  BunyanLogger,
  getLoggerConfig,
  NeuraErrorHandler,
  NeuraAppError,
} from "neura-express-app"
import {ApiController} from "./controllers/api.controller"

// import modules

// Get singleton instance of Container
const container = NeuraContainer.instance()

// Instantiate logger and error handler
const logger = new BunyanLogger(getLoggerConfig())
const errorHandler = new NeuraErrorHandler(logger)

// Register logger and error handler in our container
container.set("logger", logger)
container.set("error_handler", errorHandler)
container.set("some_value", 123)

// Bootstrapping application
const bootstrap = async (container: INeuraContainer): Promise<void> => {
  // Instantiate our application
  const app = new NeuraApp(getAppConfig(), container)

  // Set callback upon error handler to gracefully close Express application either on
  // process signals or untrusted errors
  errorHandler.onClose(async () => {
    await app.close()
  })

  // Register global middlewares
  app.addMiddleware(cors())
  app.addMiddleware(helmet())

  app.addMiddleware(bodyParser.json())
  app.addMiddleware(bodyParser.urlencoded({extended: false}))

  // Register application controllers here
  // Controller have to extend NeuraController class
  app.addController(new ApiController(container))

  // Start application
  await app.listen()
}

bootstrap(NeuraContainer.instance())
  .then(() => {
    logger.info("[Application]: Started")
  })
  .catch(err => {
    errorHandler.handleError(new NeuraAppError("bootstrapping-error", err?.message, false, err))
  })
export default bootstrap
1.3.5

10 months ago

1.3.4

1 year ago

1.3.3

1 year ago

1.3.2

1 year ago

1.3.1

1 year ago

1.3.0

1 year ago

1.2.1

1 year ago

1.2.0

1 year ago

1.1.5

2 years ago

1.1.4

2 years ago

1.1.3

2 years ago

1.1.2

2 years ago

1.1.1

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago