当前位置: 首页 > 知识库问答 >
问题:

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

南门朗
2023-03-14

我正在AWS Lambda上托管一个Nestjs应用程序(使用无服务器框架)。请注意,实现在AWS API网关之后。

问题:如何访问Nest控制器中的事件参数?

这是我如何引导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."
    }

我很难理解如何访问< code>event参数,该参数在“普通”node 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个答案

喻珂
2023-03-14

解决方案:

在引导期间将 AwsExpress无服务器软件添加到您的设置中:

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

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

现在可以访问事件上下文对象

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

学分: SO上的这个答案

 类似资料:
  • 如您所见,我正在使用codePipeline和codeBuild自动化部署。我的后端基于无服务器框架,它在触发命令时部署lambda函数。这就是我没有使用codeDeploy进行传统部署的原因<代码>构建规范。yml文件如下所示: 现在,我有3个关于CodeBuild和Serverless的问题: 问题1:命令依赖于一个名为的文件,其中包含数据库密码等秘密。此文件将不会被签入git。你认为在cod

  • 我已经在AWS中安装了Redis服务器,虽然我可以从同一台服务器中访问它,但我无法从外部IP连接到它。 我还做了以下工作: 向实例的安全组中添加了入站规则,以允许访问所有流量(要测试) 我仍然无法使用redis-cli-hxxx.xxx.xxx.xx-p 6379访问它 请帮帮忙 更新: 我可以telnet到端口,所以Redis本身一定有什么东西不允许访问? netstat结果: [ec2-use

  • 我的工作中有一个活动选择插件,它使用一个groovy脚本将另一个工作区文件夹中的文件夹列为选择。我在Jenkins单节点(没有主从节点)中使用了这个,它正在工作。 现在我已经切换到Jenkins主从服务器架构。由于工作区是从工作区,所以选择不会在作业中列出。请让我知道,如果有任何方式访问从工作在主从的工作区。

  • 我最近探索了serverless,我想为我的应用程序创建一个“简单”的后端。它应该像CRUD连接到DynamoDB,就像这里很好地显示的那样。然后转换成使用Cognoto记录用户。链接1和链接2( 在我的实施过程中,我遇到了一些问题,我想请您帮助,因为我不喜欢使用我只复制的东西,也不知道它是如何工作的: > 为什么我不需要设置CORS(标头)时初始化lambdas与无服务器,而不是在亚马逊控制台中

  • 我对Axon框架比较陌生,只是评估框架是否适合我的项目。本文描述了事件的版本控制。但是在本例中,EventStore更改为JPA。是否可以将Axon服务器上传事件作为事件存储?还是我误解了什么?

  • 我是K8s的新手“需要帮助” 现在的问题是。- 如何在k8s AWS中旋转私人容器服务,这些服务是私人的,我只能访问?