AWS Lambda(无服务器框架)上的 Nestjs |如何获取事件参数?

问题描述 投票:0回答:2

我在 AWS Lambda 上托管 Nestjs 应用程序(使用无服务器框架)。 请注意,该实现位于 AWS API Gateway 后面。

问题: 如何访问 Nest

event
中的
controller
参数?

这就是我引导 NestJS 服务器的方式:

import { APIGatewayProxyHandler } from 'aws-lambda';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Server } from 'http';
import { ExpressAdapter } from '@nestjs/platform-express';
import * as awsServerlessExpress from 'aws-serverless-express';
import * as express from 'express';

let cachedServer: Server;

const bootstrapServer = async (): Promise<Server> => {
    const expressApp = express();
    const adapter = new ExpressAdapter(expressApp);
    const app = await NestFactory.create(AppModule, adapter);
    app.enableCors();
    await app.init();
    return awsServerlessExpress.createServer(expressApp);
}

export const handler: APIGatewayProxyHandler = async (event, context) => {
    if (!cachedServer) {
        cachedServer = await bootstrapServer()
    }
    return awsServerlessExpress.proxy(cachedServer, event, context, 'PROMISE')
        .promise;
};

这是一个控制器中的功能:

@Get()
getUsers(event) { // <-- HOW TO ACCESS event HERE?? This event is undefined.
    return {
        statusCode: 200,
        body: "This function works and returns this JSON as expected."
    }

我正在努力理解如何访问

event
参数,该参数可以在“普通”节点 12.x Lambda 函数中轻松访问:

module.exports.hello = async (event) => {
    return {
        statusCode: 200,
        body: 'In a normal Lambda, the event is easily accessible, but in NestJS its (apparently) not.'
    };
}; 
node.js amazon-web-services nestjs serverless-framework
2个回答
5
投票

解决方案:

在引导期间将 AwsExpressServerlessMiddleware 添加到您的设置中:

const awsServerlessExpressMiddleware = require('aws-serverless-express/middleware')
app.use(awsServerlessExpressMiddleware.eventContext())

注意:

app.use
应该是之前
app.init()

现在可以访问

event
context
对象了:

var event = req.apiGateway.event;
var context = req.apiGateway.context;

鸣谢:这个答案关于SO


0
投票

这是使用 @codegenie/serverless-express 包访问 Express.js/NestJs 应用程序中的事件上下文的更简单方法:https://stackoverflow.com/a/78117717/3411154

© www.soinside.com 2019 - 2024. All rights reserved.