NodeJS/Knex 创建 Json 响应
NodeJS/Knex Creating Json Response
我目前正在将 NodeJS 与 knex (Postgresql) 一起用于数据库。
问题:
假设数据库中有以下两个表:
Table 1
PROJECT
id (pk)
name
Table 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()
不会 return employees
的数组。实现这一目标的方法是什么?
SQL 响应本质上是平面表,因此除了 knex 之外,您还需要一个外部库,它可以将平面信息重建为嵌套对象。
大多数 ORM 库都知道如何做。例如,构建在 knex 之上的 objection.js 使用 .eager()
来获取嵌套关系。使用 objection.js ORM,查询将如下所示 Project.query().where('id', 1).eager('employees')
我目前正在将 NodeJS 与 knex (Postgresql) 一起用于数据库。
问题:
假设数据库中有以下两个表:
Table 1
PROJECT
id (pk)
name
Table 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()
不会 return employees
的数组。实现这一目标的方法是什么?
SQL 响应本质上是平面表,因此除了 knex 之外,您还需要一个外部库,它可以将平面信息重建为嵌套对象。
大多数 ORM 库都知道如何做。例如,构建在 knex 之上的 objection.js 使用 .eager()
来获取嵌套关系。使用 objection.js ORM,查询将如下所示 Project.query().where('id', 1).eager('employees')