# Builtin

# server

  • Type: IServerConfig
  • Default: { port: 8080, staticDir: join(process.cwd(), 'public'), trustProxy: false }

Config for express server

Example:

import { join } from 'path'
import { IBootConfig } from 'express-api-bootstrap/types'

export default <IBootConfig>{
  server: {
    port: 9000,
    staticDir: join(__dirname, 'static'),
    trustProxy: true
  }
}

# cors

  • Type: boolean
  • Default: true

Whether to enable cross-origin resource sharing

Example:

import { IBootConfig } from 'express-api-bootstrap/types'

export default <IBootConfig>{
  cors: false
}

# requestParser

  • Type: IRequestParserConfig | false
  • Default: { config(app, parsers) {app.use(parsers.bodyParser.json());app.use(parsers.cookieParser());} }

Whether to enable requestParser feature

Example:

import { Express, IParsers } from 'express-api-bootstrap'
import { IBootConfig } from 'express-api-bootstrap/types'

export default <IBootConfig>{
  requestParser: {
    config(app: Express, parsers: IParsers) {
      app.use(parsers.bodyParser.json())
      app.use(parsers.cookieParser())
    }
  }
}

# api

  • Type: IApiConfig
  • Default: { scanDir: 'src/controllers', prefix: '/apis', successResponseResolver: (data) => ({ code: 200, data }), defaultFailureResponseResolver: (error: BizError) => ({ code: error.code, message: error.message || 'Internal error' }), rateLimit: false }

Configuration for api scanning/registration process

Example:

import { join } from 'path'
import { BizError } from 'express-api-bootstrap'
import { IBootConfig } from 'express-api-bootstrap/types'

export default <IBootConfig>{
  api: {
    scanDir: join(process.cwd(), 'src', 'controllers'),
    prefix: '/apis',
    successResponseResolver: data => {
      return { code: 200, data }
    },
    failureResponseResolver: (error: BizError) => {
      return {
        code: error.code,
        message: error.message || 'Internal error'
      }
    }
  }
}

# api.rateLimit

  • Type: IRateLimitConfig | false
  • Default: false

Configuration pass to express-rate-limit. Defaults to false. Enable rateLimite by passing IRateLimitConfig option.

api.rateLimit.max

  • Type: number
  • Default: 5

Max number of connections during windowMs milliseconds before sending a 429 response.

Defaults to 5. Set to 0 to disable.

api.rateLimit.windowMs

  • Type: number
  • Default: 60000

How long in milliseconds to keep records of requests in memory.

Defaults to 60000 (1 minute).

api.rateLimit.message

  • Type: string
  • Default: Too many requests, please try again later

Error message sent to user when max is exceeded.

May be a String, JSON object, or any other value that Express's res.send supports.

Defaults to 'Too many requests, please try again later.'

api.rateLimit.statusCode

  • Type: number
  • Default: 429

HTTP status code returned when max is exceeded.

Defaults to 429.

api.rateLimit.headers

  • Type: boolean
  • Default: false

Enable headers for request limit (X-RateLimit-Limit) and current usage (X-RateLimit-Remaining) on all responses and time to wait before retrying (Retry-After) when max is exceeded.

Default to false.

api.rateLimit.keyGenerator

  • Type: (req: express.Request, res: express.Response) => string
  • Default: (req: express.Request, res: express.Response) => req.ip + req.originalUrl

Function used to generate keys.

Defaults to req.ip + req.originalUrl

api.rateLimit.skip

  • Type: (req: express.Request, res: express.Response) => boolean
  • Default: (req: express.Request, res: express.Response) => false

Function used to skip (whitelist) requests. Returning true from the function will skip limiting for that request.

Defaults to always false (count all requests).

api.rateLimit.store

  • Type: rateLimit.Store
  • Default: MemoryStore

The storage to use when persisting rate limit attempts.

By default, the MemoryStore is used.

Available data stores are:

  • MemoryStore: (default) Simple in-memory option. Does not share state when app has multiple processes or servers.
  • rate-limit-redis: A Redis-backed store, more suitable for large or demanding deployments.
  • rate-limit-memcached: A Memcached-backed store.
  • rate-limit-mongo: A MongoDB-backed store.
Last Updated: 12/10/2019, 5:36:53 PM