【问题标题】:Find one entity from database table in TypeORM在 TypeORM 中从数据库表中查找一个实体
【发布时间】:2021-05-15 02:15:53
【问题描述】:

我在我的 express.js 项目中使用 TypeORM。

我想知道在TypeORM中,如何在不提供任何条件的情况下从数据库中找到实体,我只需要从数据库表中获取一个实例。

例如,我有一个映射到Student 实体的students 表。我试过了:

const student = await Student.find()[0];

但它不起作用。有什么建议吗?

附:在我找到一个学生后,我需要访问它的 id,例如const sid = student.id

我正在使用sid 构造一个数据作为响应的有效负载。例如const payload={'student_id': sid, ...}

【问题讨论】:

  • 你可以试试const student = await Student.findOne({})

标签: node.js express typeorm


【解决方案1】:

您可以尝试通过传递空对象作为参数来使用 findOne 方法。

const student = await Student.findOne({})

您也可以使用您当前的方法,但您必须确保在访问数组索引之前将您的 await 包装在括号中。

const student = (await Student.find())[0];

但请注意,find() 会读取所有数据库,而 findOne() 只会读取一次。

更新 为避免类型问题,您可以添加类型保护。

if(!student){
  // return or send error as response.
return;
}

【讨论】:

  • 谢谢。当我尝试访问找到的对象 student.id 的 id 时出现错误“对象可能未定义”,如何摆脱此错误?
  • 您可以使用可选链接student?.id 访问该值。您还应该考虑在try/catch 中移动整个块,以防承诺解决失败。
  • 尝试了您的建议,但收到错误Type 'undefined' is not assignable to type 'MultipartValue',请您更新您的答案,以访问找到的student 的字段,例如student.id
  • 请添加相关代码,说明您如何使用student 值。
  • 不,我的意思是,你是如何使用 sid 的?你在调用什么函数?你需要在任何你使用它的地方添加一个类型保护来过滤掉未定义的值。
猜你喜欢
  • 2022-01-06
  • 2011-09-30
  • 2023-03-19
  • 2023-03-16
  • 2020-12-09
  • 1970-01-01
  • 2021-06-05
  • 2012-04-02
  • 1970-01-01
相关资源
最近更新 更多