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

     2023-03-07     88

关键词:

【中文标题】AWS Lambda 上的 Nestjs(无服务器框架)|如何访问事件参数?【英文标题】:Nestjs on AWS Lambda (Serverless Framework) | How to access the event parameter? 【发布时间】:2021-03-20 16:14:39 【问题描述】:

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

问题:如何访问我的 Nest controller 中的 event 参数?

这就是我引导 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.'
    ;
; 

【问题讨论】:

【参考方案1】:

解决方案:

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

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

注意:app.use 应该在之前 app.init()

现在可以访问eventcontext 对象:

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

致谢:This answer on SO

【讨论】:

外部 Http 调用上的无服务器框架/Lambda 错误

】外部Http调用上的无服务器框架/Lambda错误【英文标题】:ServerlessFramework/LambdaErrorsonExternalHttpCalls【发布时间】:2020-02-1220:07:17【问题描述】:我使用部署到AWSLambda的无服务器框架编写了一个简单的服务,它调用外部Http服务并返... 查看详情

无服务器 AWS Lambda 边缘:MalformedHandlerName

】无服务器AWSLambda边缘:MalformedHandlerName【英文标题】:ServerlessAWSLambdaEdge:MalformedHandlerName【发布时间】:2021-06-2103:30:28【问题描述】:我正在按照以下示例设置LambdaEdge函数:https://www.serverless.com/blog/lambda-at-edge-support-added代码:.... 查看详情

AWS 无服务器 Java Lambda 调试

】AWS无服务器JavaLambda调试【英文标题】:AWSServerlessJavaLambdaDebug【发布时间】:2019-01-2117:07:22【问题描述】:请告诉我是否可以在Eclipse中调试JavaAWSLambda(无服务器框架)。任何指针都会很有帮助【问题讨论】:【参考方案1】:... 查看详情

为 AWS Lambda 和无服务器推荐啥本地节点版本

】为AWSLambda和无服务器推荐啥本地节点版本【英文标题】:Whatlocalnode-versionisrecommendedforAWSLambdaandServerless为AWSLambda和无服务器推荐什么本地节点版本【发布时间】:2016-07-0718:02:10【问题描述】:从AWS-Lambda和无服务器框架开始,我... 查看详情

使用无服务器和 chrome-aws-lambda 节点包在 AWS Lambda 上找不到 Chrome 二进制文件

】使用无服务器和chrome-aws-lambda节点包在AWSLambda上找不到Chrome二进制文件【英文标题】:ChromeBinaryNotFoundonAWSLambdaUsingServerlessandchrome-aws-lambdaNodepackage【发布时间】:2020-05-1603:10:38【问题描述】:我创建了一个接受URL并将其转换为PD... 查看详情

无服务器/AWS-Lambda 设置的 graphiql UI 损坏

】无服务器/AWS-Lambda设置的graphiqlUI损坏【英文标题】:graphiqlUIisbrokenforServerless/AWS-Lambdasetup【发布时间】:2018-03-1011:01:31【问题描述】:这是我正在关注的AWSLambda和无服务器以及GraphQL的参考设置:https://github.com/serverless/serverless-g... 查看详情

AWS lambda 无服务器网站会话维护

】AWSlambda无服务器网站会话维护【英文标题】:AWSlambdaserverlesswebsitesessionmaintaining【发布时间】:2017-05-3019:38:45【问题描述】:我使用node.js作为后端开发了一个网站。最近我正在尝试使其无服务器并部署到lambda。我将重写我的大... 查看详情

在本地测试 Elasticache 和无服务器 AWS Lambda

】在本地测试Elasticache和无服务器AWSLambda【英文标题】:TestingElasticacheandServerlessAWSLambdalocally【发布时间】:2017-10-0721:06:19【问题描述】:我正在使用无服务器来使用nodejs模板创建lambda函数。为了连接到我的ElasticacheRedis,我设置... 查看详情

使用无服务器框架的 lambda AWS 中的授权代码授予

】使用无服务器框架的lambdaAWS中的授权代码授予【英文标题】:AuthorizationcodegrantinlambdaAWSwithServerlessFramework【发布时间】:2019-05-0821:16:31【问题描述】:我正在使用无服务器框架开发lambda服务,该服务负责登录Cognito。constaws_cognit... 查看详情

AWS 无服务器自定义 jwt 授权方 lambda 设置 cors 响应

】AWS无服务器自定义jwt授权方lambda设置cors响应【英文标题】:AWSServerlesscustomjwtauthorizerlambdasetcorsresponse【发布时间】:2019-12-1520:07:04【问题描述】:我有一个restapi部署在带有无服务器框架的aws上。现在,我在其中创建了一个简... 查看详情

AWS 无服务器架构 – 为啥要使用 API 网关?

】AWS无服务器架构–为啥要使用API网关?【英文标题】:AWSserverlessarchitecture–WhyshouldIuseAPIgateway?AWS无服务器架构–为什么要使用API网关?【发布时间】:2018-06-0507:36:45【问题描述】:这是我的用例:托管在s3上的静态反应前端关... 查看详情

带有 AWS Lambda 错误“找不到模块”的无服务器框架

】带有AWSLambda错误“找不到模块”的无服务器框架【英文标题】:ServerlessFrameworkwithAWSLambdaerror"Cannotfindmodule"【发布时间】:2017-08-1009:30:42【问题描述】:我正在尝试使用无服务器框架创建一个使用开放天气NPM模块的Lambda... 查看详情

通过 AWS Lambda 和 Cognito 注册用户(无服务器架构)

】通过AWSLambda和Cognito注册用户(无服务器架构)【英文标题】:SignUpUserviaAWSLambda&Cognito(ServerlessArchitecture)【发布时间】:2017-11-1200:28:36【问题描述】:我在身份验证方法中使用无服务器框架。我的目标是创建一个API端点来触... 查看详情

使用 AWS Lambda 更新无服务器 CQRS + EventSourcing ReadModel

】使用AWSLambda更新无服务器CQRS+EventSourcingReadModel【英文标题】:ServerlessCQRS+EventSourcingReadModelupdatewithAWSLambda【发布时间】:2018-02-1918:39:52【问题描述】:我正在尝试基于AWS无服务器架构实现CQRS+事件溯源后端。问题在于readmodel更... 查看详情

无服务器框架 + AWS + Lambda + DynamoDB + GraphQL + Apollo Server = 无法使 POST 请求工作

】无服务器框架+AWS+Lambda+DynamoDB+GraphQL+ApolloServer=无法使POST请求工作【英文标题】:Serverlessframework+AWS+Lambda+DynamoDB+GraphQL+ApolloServer=Can\'tmakePOSTRequestWork【发布时间】:2018-12-1318:29:08【问题描述】:好的,我这几天一直在处理这个问... 查看详情

使用 graphql、aws lambda 和无服务器框架的多个 url 路径选项错误

】使用graphql、awslambda和无服务器框架的多个url路径选项错误【英文标题】:Multipleurlpathoptionerrorusinggraphql,awslambdaandserverlessframework【发布时间】:2020-03-1106:35:38【问题描述】:我正在使用无服务器框架将graphqlnodejs包部署到lambda函... 查看详情

使用无服务器部署 AWS Lambda 函数在需要外部模块时不会部署

】使用无服务器部署AWSLambda函数在需要外部模块时不会部署【英文标题】:DeployinganAWSLambdafunctionusingserverlessdoesnotdeploywhenexternalmodulesarerequired【发布时间】:2020-06-0714:51:49【问题描述】:我目前正在尝试使用无服务器部署AWSlambda... 查看详情

如何从 AWS Lambda 函数 + 无服务器框架的 URL 中删除阶段?

】如何从AWSLambda函数+无服务器框架的URL中删除阶段?【英文标题】:HowtoremovestagefromURLsforAWSLambdafunctions+Serverlessframework?【发布时间】:2018-04-0202:40:16【问题描述】:我正在使用无服务器框架在AWSLambda中部署函数,但我找不到从... 查看详情