AWS

Amazon Web Services is one possible way host your Node.js application.

This tutorial show you how to configure the Express application written with Ts.ED, to be executed as aAWS Lambda Function.

More information here: Official AWS Docs

Installation

First, install the aws-serverless-express module:

npm install --save aws-serverless-express
1

Configuration

You need to create three files:

// server.js
import {ServerSettings, ServerLoader} from "@tsed/common";

@ServerSettings({ 
   port: 3000,
   rootDir: __dirname
})
export class Server extends ServerLoader {

  $onMountingMiddlewares() {
      
      const cookieParser = require('cookie-parser'),
                  bodyParser = require('body-parser'),
                  compress = require('compression'),
                  methodOverride = require('method-override'),
                  cors = require('cors'),
                  compression = require('compression'),
                  awsServerlessExpressMiddleware = require('aws-serverless-express/middleware')

              this
                  .use(compression())
                  .use(cors())
                  .use(cookieParser())
                  .use(compress({}))
                  .use(methodOverride())
                  .use(bodyParser.json())
                  .use(bodyParser.urlencoded({
                      extended: true
                  }));
              
      this.use(awsServerlessExpressMiddleware.eventContext())
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// lambda.js
import {Server} from "./server.js";
const awsServerlessExpress = require("aws-serverless-express");

const server = new Server();
// optional: Ts.ED creates two servers that listen for HTTP and HTTPS requests respectively.
// You can enable/disable each one independently with these flags
server.settings.httpPort = false;
server.settings.httpsPort = false;

const lambdaServer = awsServerlessExpress.createServer(server.expressApp);

server.start();

// The function handler to setup on AWS Lambda console -- the name of this function must match the one configured on AWS
export const handler = (event, context, callback) => awsServerlessExpress.proxy(lambdaServer, event, context);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// local.js
import {Server} from "./server.js";

new Server().start();
1
2
3
4

::: tip Example You can see an example provided by the AWS Team on this github repository. :::

::: tip Credits Thanks to vetras for his contribution. :::