我在 NEST.JS LAMBDA PROXY 应用程序上收到 CORS 错误

Posted

技术标签:

【中文标题】我在 NEST.JS LAMBDA PROXY 应用程序上收到 CORS 错误【英文标题】:I am getting CORS error on NEST.JS LAMBDA PROXY application 【发布时间】:2021-10-26 14:34:47 【问题描述】:

我正在使用 Lambda 代理应用程序,该应用程序在部署到 AWS 后会在请求后引发 cors 错误。

CORS 在 NEST.js 应用程序端启用

async function bootstrap(): Promise<Handler> 
  if (!cachedServer) 
    const expressApp = express();
    const nestApp = await NestFactory.create(AppModule, new ExpressAdapter(expressApp));

    const validationOptions = 
      validationError:  target: false ,
    ;
    nestApp.useGlobalPipes(new ValidationPipe(validationOptions));
    const logger: Logger = new Logger(new PinoLogger(null));
    nestApp.useLogger(logger);
    nestApp.enableCors();
    nestApp.use(helmet());
    nestApp.useGlobalFilters(new ServiceExceptionFilter());
    await nestApp.init();

    cachedServer = serverlessExpress( app: expressApp );
  

  return cachedServer;


export const handler = async (event: any, context: Context, callback: any) => 
  if (event.path === '/swagger') 
    event.path = '/swagger/';
  
  event.path = event.path.includes('swagger-ui') ? `/swagger$event.path` : event.path;

  const server = await bootstrap();
  return server(event, context, callback);
;

这里是 serverless.yml 配置部分

functions:
  main:
    handler: src/lambda.handler
    events:
      - http:
          method: ANY
          path: /any+
          cors: true

有人可以解释这里有什么问题吗?为什么我从部署的 AWS 应用程序中收到 cors 错误?我正在使用 root 用户来运行该应用程序。它在本地工作正常。顺便说一句,如果它可以帮助我拥有运行良好但 POST 和 PATCH 不起作用的健康端点 (GET)。

【问题讨论】:

【参考方案1】:

我认为您需要设置以下属性作为响应

1.'Access-Control-Allow-Origin':您可以从请求标头中获取的原始值

    'Access-Control-Allow-Credentials': true,

【讨论】:

以上是关于我在 NEST.JS LAMBDA PROXY 应用程序上收到 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 nest.js 中处理第三方依赖项

Nest.js - 请求实体太大 PayloadTooLargeError:请求实体太大

无法连接到数据库 - NEST.JS 和 TypeORM

如何正确使用 Nest.js 的 @Headers?

如何在没有守卫装饰器的情况下始终验证 JWT? (Nest.js + 护照)

在 Nest.js 中接受表单数据