使用nest.js在AWS Lambda中获取Cognito数据(即requestContext)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用nest.js在AWS Lambda中获取Cognito数据(即requestContext)相关的知识,希望对你有一定的参考价值。

我正在遵循https://github.com/serverless/examples/tree/master/aws-node-typescript-nest中的示例

我做了什么

1)成功将此部署到AWS并添加了一个Cognito授权者(我已经验证了所有这些工作,并且正在requestContext中获取用户数据)。

2)设置NestJS以处理路由。

我需要做什么

eventcontext变量交给NestJS控制器或可注入服务,以便我可以进行进一步的验证和个性化。

main.ts片段,首先将请求路由。通知事件和上下文

async function bootstrapServer(): Promise<Server> 
  if (!cachedServer) 
    try 
      const expressApp = require('express')();
      const nestApp = await NestFactory.create(AppModule, expressApp);
      nestApp.use(eventContext());
      await nestApp.init();
      cachedServer = createServer(expressApp, undefined, binaryMimeTypes);
    
    catch (error) 
      return Promise.reject(error);
    
  
  return Promise.resolve(cachedServer);


export const handler: Handler = async (event: any, context: Context) => 
  cachedServer = await bootstrapServer();
  // LOOK HERE!!!!!!
  // How do I pass  event and context
  return proxy(cachedServer, event, context, 'PROMISE').promise;

这里是控制器

我想在其中使用事件和上下文的控制器片段

import  AppService  from './app.service';

@Controller()
export class AppController 
  // how do I access event and context in this controller class?
  constructor(private readonly appService: AppService) 

  @Get('hello')
  getHello(): string 
    return this.appService.getHello();
  

答案

最后找到了它。

aws-serverless-example给了我所需的提示。

aws-serverless-express的一部分是将事件信息添加到req正文的中间件。

示例

import * as awsServerlessExpressMiddleware from "aws-serverless-express/middleware";
app.use(awsServerlessExpressMiddleware.eventContext());
app.get('/', (req, res) => 
    res.json(req.apiGateway.event);
);

以上是关于使用nest.js在AWS Lambda中获取Cognito数据(即requestContext)的主要内容,如果未能解决你的问题,请参考以下文章

Nest.js 与 AWS Cognito,如何访问用户属性

Nest.js 获取注入器实例

Nest.js 在护照本地策略中获取请求标头

在nest.js 中,是不是可以在参数装饰器中获取服务实例?

无论如何在 Nest.js 中使用 Fastify 获取请求、响应的类型接口

有啥方法可以在不使用 Nest.js 中的 async/await 的情况下从数据库中获取数据?