[英]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 start
或serverless 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.