Extension module for the ts-lambda-api
package which enables running lambda REST API’s locally using express.
This module also provides Swagger UI support, powered by the swagger-ui-express
npm package.
Read the full typedoc
documentation: https://beholdio.github.io/ts-lambda-api-local/
Note: These steps modify an existing ts-lambda-api
app. If you don’t have one, see the package documentation.
npm install -D ts-lambda-api-local
npm install -D @types/node
import { ApiConsoleApp } from ‘ts-lambda-api-local’
const appConfig = new AppConfig()
appConfig.base = ‘/api/v1’ appConfig.version = ‘v1’
// if you use a different directory, point to it here instead of ‘controllers’ const controllersPath = [path.join(__dirname, ‘controllers’)] let app = new ApiConsoleApp(controllersPath, appConfig)
app.runServer(process.argv)
- Compile your application and run the new JS file using Node.js
- You can now call your API locally:
wget -qO - http://localhost:8080/api/v1/hello-world/
----
# Command Line Arguments
----
`ApiConsoleApp` supports several optional command line parameters.
- `-p` or `--port`: Port to listen on, defaults to `8080`
- `-h` or `--host`: Host to accept requests on, defaults to `*` (any hostname/ip)
- `-c` or `--cors-origin`: CORS origins to allow, defaults to `*` (any origin)
----
# Configuration
----
Both the `configureApp` and `configureApi` methods documented in `ts-lambda-api` are available in the `ApiConsoleApp` class.
----
# Swagger UI
----
To enable the Swagger UI page, simply enable open-api in your application config. The interface will then be available from the `/swagger` endpoint. For example, if you configured your app like below:
```typescript
import * as path from 'path'
import { AppConfig } from 'ts-lambda-api'
import { ApiConsoleApp } from 'ts-lambda-api-local'
const appConfig = new AppConfig()
appConfig.base = '/api/v1'
appConfig.version = 'v1'
appConfig.openApi.enabled = true
// if you use a different directory, point to it here instead of 'controllers'
const controllersPath = [path.join(__dirname, 'controllers')]
let app = new ApiConsoleApp(controllersPath, appConfig)
app.runServer(process.argv)
Then, the Swagger UI interface will be available @ http://localhost:8080/api/v1/swagger
When you are packing up your lambda API for release to AWS, ensure that you have installed this package as a development dependency only, otherwise it will significantly slow down and bloat your lambda.