簡體   English   中英

如何將 typeDORM 與 NestJS 和 AWS Lambda 一起使用

[英]How to use typeDORM with NestJS and AWS Lambda

我正在嘗試構建一個 NestJS 項目並使用 typeDORM 來保存和接收來自 DynamoDB 的項目。 最終,該應用程序應部署為 AWS Lambda。 對於本地測試,我正在使用serverless offline

這是一個演示我的問題的項目: https ://github.com/m-kotek/serverless-typedorm

有什么問題?
如果應用程序使用serverless offline startserverless invoke local -f main啟動,Lambda 會崩潰。

我按照typeDORM 的 github上的說明進行操作,並在main.ts中調用了createConnection() 但是,如果getEntityManager()現在由app.service.ts的構造函數執行,則輸出如下:

[Nest] 24576  - 23.11.2022, 19:36:20     LOG [NestFactory] Starting Nest application...
[Nest] 24576  - 23.11.2022, 19:36:20   ERROR [ExceptionHandler] No such connection with name "default" exists
✖ Lambda timeout.

我還嘗試了一種單例模式方法,其中 entityManager 被初始化,然后在main.ts中導出。 這導致了以下輸出:

無服務器離線啟動的輸出

[Nest] 25733  - 23.11.2022, 19:47:11     LOG [NestFactory] Starting Nest application...
[Nest] 25733  - 23.11.2022, 19:47:11   ERROR [ExceptionHandler]
✖ Lambda timeout.

使用無服務器調用 local -f main 的輸出

[Nest] 26873  - 23.11.2022, 20:47:22     LOG [NestFactory] Starting Nest application... +2ms
[Nest] 26873  - 23.11.2022, 20:47:22   ERROR [ExceptionHandler]
TypeError
at Reflect.getMetadata (/home/mon/Desktop/api-master-serverless/node_modules/reflect-metadata/Reflect.js:354:23)
at DependenciesScanner.isInjectable (/home/mon/Desktop/api-master-serverless/node_modules/@nestjs/core/scanner.js:302:26)
at DependenciesScanner.insertModule (/home/mon/Desktop/api-master-serverless/node_modules/@nestjs/core/scanner.js:73:18)
at DependenciesScanner.scanForModules (/home/mon/Desktop/api-master-serverless/node_modules/@nestjs/core/scanner.js:34:43)
at DependenciesScanner.scan (/home/mon/Desktop/api-master-serverless/node_modules/@nestjs/core/scanner.js:27:20)
at async /home/mon/Desktop/api-master-serverless/node_modules/@nestjs/core/nest-factory.js:95:17
at async Function.asyncRun (/home/mon/Desktop/api-master-serverless/node_modules/@nestjs/core/errors/exceptions-zone.js:22:13)
at async NestFactoryStatic.initialize (/home/mon/Desktop/api-master-serverless/node_modules/@nestjs/core/nest-factory.js:94:13)
at async NestFactoryStatic.create (/home/mon/Desktop/api-master-serverless/node_modules/@nestjs/core/nest-factory.js:37:9)
at async bootstrap (/home/mon/Desktop/api-master-serverless/dist/main.js:33:17)

主.ts:

const documentClient = new DocumentClientV3(new DynamoDBClient({}));

export const masterTable = new Table({
  name: 'master',
  partitionKey: 'PK',
  sortKey: 'SK',
});

export let entityManager: EntityManager = null;

async function bootstrap() {
  config.update({
    region: '--',
    accessKeyId: '--',
    secretAccessKey: '--',
    signatureVersion: '--',
  });

  createConnection({
    table: masterTable,
    name: 'default',
    entities: [Organization],
    documentClient,
  });

  entityManager = getEntityManager();

  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}

bootstrap();

我嘗試在 index.ts、main.ts 和兩者中同時導入“reflect-metadata”,結果相同。

以前有人遇到過這種行為嗎?
在此先感謝您的幫助

我能夠解決這個問題。 我完全按照您在上面所做的,但使用了以下配置:

const documentClient = new DocumentClientV3(new DynamoDBClient({
    region: "local",
    endpoint: "http://localhost:8000"
}));

config.update({
    region: "local",
    dynamodb: {
        endpoint: "http://localhost:8000"
    }
})

注意:我還在本地運行了 dynamodb。 請按照此處的說明在本地運行 dynamodb: 在您的計算機上本地部署 DynamoDB

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM