aws-lambda - 如何在无服务器 lambda 中使用 Typeorm 的装饰器?

标签 aws-lambda serverless typeorm

我想使用 Typeorm 访问 AWS RDS 上的 postgress 数据库(以及无服务器离线的本地数据库)。我已经设置了一个项目并且它可以工作,但不能使用装饰器(这使得 Typeorm 不那么有趣)。文档说

You need to install reflect-metadata shim:

npm install reflect-metadata --save

and import it somewhere in the global place of your app (for example in app.ts):

import "reflect-metadata";

我的问题是,在我的 lambda 代码中,没有“全局位置”,我正在编写一个 lambda 函数。

作品:

import { EntitySchema } from "typeorm";

export class Status {
    constructor(
        public id: number,

        public message: string,
    ) { }
}

export const statusSchema = new EntitySchema({
    name: "Status",
    target: Status,
    columns: {
        id: {
            primary: true,
            type: "int",
            generated: true
        },
        message: {
            type: "varchar"
        },
    }
});

但是我想要的是如果当然使用像这样的装饰器

@Entity()
export class Status {
    constructor(
        @PrimaryGeneratedColumn()
        public id: number,

        @Column()
        public message: string,
    ) { }
}

执行查询时遇到的错误是

"ColumnTypeUndefinedError: Column type for Function#undefined is not defined and cannot be guessed. Make sure you have turned on an \"emitDecoratorMetadata\": true option in tsconfig.json. Also make sure you have imported \"reflect-metadata\" on top of the main entry file in your application (before any entity imported).If you are using JavaScript instead of TypeScript you must explicitly provide a column type.",
        "at new ColumnTypeUndefinedError (/Users/jonas/repos/spiideo/status-service/src/error/ColumnTypeUndefinedError.ts:9:9)",
        "at /Users/jonas/repos/spiideo/status-service/src/decorator/columns/Column.ts:139:23",
        "at /Users/jonas/repos/spiideo/status-service/.build/src/entity/status.js:16:37",
        "at DecorateConstructor (/Users/jonas/repos/spiideo/status-service/node_modules/reflect-metadata/Reflect.js:541:33)",
        "at Object.decorate (/Users/jonas/repos/spiideo/status-service/node_modules/reflect-metadata/Reflect.js:130:24)",
        "at __decorate (/Users/jonas/repos/spiideo/status-service/.build/src/entity/status.js:8:92)",
        "at Object.<anonymous> (/Users/jonas/repos/spiideo/status-service/src/entity/status.ts:8:20)",
        "at Module._compile (internal/modules/cjs/loader.js:1151:30)",
        "at Object.Module._extensions..js (internal/modules/cjs/loader.js:1171:10)",
        "at Module.load (internal/modules/cjs/loader.js:1000:32)",
        "at Function.Module._load (internal/modules/cjs/loader.js:899:14)",
        "at Module.require (internal/modules/cjs/loader.js:1040:19)",
        "at require (internal/modules/cjs/helpers.js:72:18)",
        "at Object.<anonymous> (/Users/jonas/repos/spiideo/status-service/src/service/status-service.ts:8:1)",
        "at Module._compile (internal/modules/cjs/loader.js:1151:30)",
        "at Object.Module._extensions..js (internal/modules/cjs/loader.js:1171:10)",
        "at Module.load (internal/modules/cjs/loader.js:1000:32)",
        "at Function.Module._load (internal/modules/cjs/loader.js:899:14)",
        "at Module.require (internal/modules/cjs/loader.js:1040:19)",
        "at require (internal/modules/cjs/helpers.js:72:18)",
        "at Object.<anonymous> (/Users/jonas/repos/spiideo/status-service/src/controller/status-controller.ts:7:1)",
        "at Module._compile (internal/modules/cjs/loader.js:1151:30)",
        "at Object.Module._extensions..js (internal/modules/cjs/loader.js:1171:10)",
        "at Module.load (internal/modules/cjs/loader.js:1000:32)",
        "at Function.Module._load (internal/modules/cjs/loader.js:899:14)",
        "at Module.require (internal/modules/cjs/loader.js:1040:19)",
        "at require (internal/modules/cjs/helpers.js:72:18)",
        "at Object.createHandler (/Users/jonas/repos/spiideo/status-service/node_modules/serverless-offline/src/functionHelper.js:215:15)",
        "at handler (/Users/jonas/repos/spiideo/status-service/node_modules/serverless-offline/src/ApiGateway.js:485:40)",
        "at module.exports.internals.Manager.execute (/Users/jonas/repos/spiideo/status-service/node_modules/@hapi/hapi/lib/toolkit.js:41:33)",
        "at Object.internals.handler (/Users/jonas/repos/spiideo/status-service/node_modules/@hapi/hapi/lib/handler.js:46:48)",
        "at exports.execute (/Users/jonas/repos/spiideo/status-service/node_modules/@hapi/hapi/lib/handler.js:31:36)",
        "at Request._lifecycle (/Users/jonas/repos/spiideo/status-service/node_modules/@hapi/hapi/lib/request.js:312:68)",
        "at processTicksAndRejections (internal/process/task_queues.js:97:5)"

最佳答案

看起来您正在尝试在构造函数中添加字段/属性。请参阅https://typeorm.io/#/embedded-entities关于呈现字段的属性如何在类上而不是在构造函数内。

关于aws-lambda - 如何在无服务器 lambda 中使用 Typeorm 的装饰器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60442383/

相关文章:

node.js - 伪造者page.evaluate()随机失败,出现: Execution context was destroyed,的原因很可能是由于导航

node.js - 语法错误: Unexpected token { on compiled typescript

mysql - 如何在TypeORM迁移中创建自增整数字段?

postgresql - Postgres 独特的枚举集?

python - 使用 AWS Lambda 加载 Keras 模型

java - 如何在 AWS Lambda 中调用受 SSL 保护的 REST 服务

azure - Azure Function 与 .Net 5 中的并发(隔离)

mysql - 未能找到库 : libmysqlclient. so.18

python - 从 Python 脚本执行 Julia 文件

c# - SignalR 服务(无服务器)- Azure 函数