【问题标题】:TypeORM return plain objectTypeORM 返回普通对象
【发布时间】:2020-03-14 07:31:56
【问题描述】:

如何从 TypeORM 存储库函数(如 find、create、update 或 delete)返回纯 JavaScript 对象?

const user = User.findOne({ where: { id: 1 } }); 

实际:

User | undefined

{
  User: {
    id: 1
  }
}

相反,我想接收一个独立于任何库/框架的普通对象

预期:

{
  id: 1
}

这样更容易独立于框架,并且您的存储库调用可以在任何时间点互换,而无需重写整个应用程序,也不会严重依赖第三方脚本。

Sequelize 例如有一个选项{ plain: true }

【问题讨论】:

    标签: javascript database orm sequelize.js typeorm


    【解决方案1】:

    您可以轻松地使用类转换器库从实体实例生成普通对象:

    https://github.com/typestack/class-transformer

    const user = repository.findOne({ where: { id: 1 } });
    const plain = classToPlain(user);
    

    另一种方法是使用 queryBuilder API 并从数据库返回原始结果

    const rawResult = repository.createQueryBuilder("user")
        .select("user")
        .where("user.id = :id", {id: 1})
        .getRawOne();
    

    关键是您为什么要这样做?实体是 TypeOrm 中的第一个公民,因此如果某些内容不向后兼容,您希望对其结构的任何更改都应生成编译错误。使用普通对象会隐藏合同更改,并且您只会在运行时发现错误,不确定在我看来这是否是使用 TypeOrm 的最佳方式。

    【讨论】:

    • 有时我们只想要没有函数和包装器的纯数据,传递给 UI,传递外部世界......转换和提取是可以的,但它们会使源代码变得丑陋
    猜你喜欢
    • 1970-01-01
    • 2019-03-01
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多