【问题标题】:NodeJS/Knex Creating Json ResponseNodeJS/Knex 创建 Json 响应
【发布时间】:2019-01-04 13:05:02
【问题描述】:

我目前正在使用带有 knex (Postgresql) 的 NodeJS 来处理数据库。

问题:

想象一下数据库中有以下两个表:

表 1


PROJECT
id (pk)
name

表 2


EMPLOYEE
id (pk)
name
project_id (fk)

我想为用户创建一个如下所示的 json 响应:

{
  projects: [
    {
      id: 1,
      name: 'emxample 1',
      employees: [
       {
         id: 1,
         name: 'example 1'
       },
       {
         id: 2,
         name: 'example 2'
       }
      ]
    }
  ] 
}

等等。

进行如下查询:

let query = knex('project').select('project.*', 'employee.*').join('employee', 'employee.project_id', '=', 'project.id');

query.then((projects) => { res.json(projects); }); 

并且使用res.json() 不会返回employees 的数组。实现这一目标的方法是什么?

【问题讨论】:

  • 显示更多上下文代码。你在哪里/如何打电话给res.json()
  • 我在查询执行后直接调用它(见更新示例)

标签: json node.js postgresql express knex.js


【解决方案1】:

SQL 响应本质上是平面表,因此除了 knex 之外,您还需要一个外部库,它可以将平面信息重构为嵌套对象。

大多数 ORM 库都知道如何做到这一点。例如,在 knex 之上构建的 objection.js 使用 .eager() 来获取嵌套关系。使用 objection.js ORM,查询看起来像这样 Project.query().where('id', 1).eager('employees')

【讨论】:

  • 你是对的。如果可以在没有外部库的情况下使用 knex 以某种方式完成它,我会很高兴(这当然是可能的 - 但不是在合理的时间内)。我最终使用了书架。
  • 我不会向任何人推荐书架,但祝你好运。 Knex 是较低级别的库,它不应该知道任何关于对象层次结构的东西,只是简单的 SQL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多