我正在使用 Node.JS 和 PostgreSQL 构建一个非常简单的 REST 平台,使用 pg-promise 来访问数据库。我的目标是创建一个非常简单的票务系统,其中包含用户和票证。在这一点上,我只想能够查询服务器以获取所有票证的列表。
我的数据库由以下格式的两个表组成:
CREATE TABLE people (
ID SERIAL PRIMARY KEY,
NAME VARCHAR(128)
);
CREATE TABLE tickets (
ID SERIAL PRIMARY KEY,
SUBMITTED_BY int4 REFERENCES people(ID),
TITLE VARCHAR(128)
如您所见,有一个外键指向人员的票。我用以下数据填充了我的数据库:
coop=> SELECT * FROM people;
id | name
----+----------
1 | John Doe
(1 row)
coop=> SELECT * FROM tickets;
id | submitted_by | title
----+--------------+------------------
1 | 1 | My first ticket!
(1 row)
我使用 pg-promise 和以下查询函数来呈现 JSON 响应:
// GET ALL query function
function getAllTickets(req, res, next) {
db.any('select * from tickets left join people on tickets.submitted_by = people.id;')
.then(function (data) {
res.status(200)
.json({
status: 'success',
data: data,
message: 'Retrieved ALL tickets'
});
})
.catch(function (err) {
return next(err);
});
}
该函数有效,我可以检索以下格式的 JSON 输出:
:: GET /api/tickets
{"status":"success","data":[{"id":1,"submitted_by":1,"title":"My first ticket!","name":"John Doe"}],"message":"Retrieved ALL tickets"}
然而,这不是我想要的格式。我想将 'persons' 对象封装在 'tickets' 对象中,替换外键如下:
{"status":"success","data":[{"id":1,submitted_by: {"id": 1, "name":"John Doe"},"title":"My first ticket!"}],"message":"Retrieved ALL tickets"}
我想这样做的原因是我可以轻松地从 Angular2 服务中使用这个 API,并将票证和人员转换为我的组件中的对象。但是,我完全不知道如何去做,而且 pg-promise 文档也没有帮助。
过去一年我一直在使用 Django 进行网络编程,但自从我切换到 Node.JS 后,我感觉自己完全是个新手。有人可以帮我一把或指出我正确的方向吗?