Аз съм автор на pg-promise;)
con.task(t => {
const a = post => t.any('SELECT * FROM comment WHERE idPost = $1', post.id)
.then(comments => {
post.comments = comments;
return post;
});
return t.map('SELECT *, avatar FROM post, users WHERE user = $1 AND user = alias ORDER BY time DESC LIMIT 10 OFFSET $2', [username, pos], a)
.then(t.batch);
})
.then(posts => {
res.send(posts);
})
.catch(error => {
console.log(error);
});
Вижте също този въпрос:вземете таблица JOIN като масив от резултати с PostgreSQL/NodeJS.
АКТУАЛИЗИРАНЕ
В случай, че не искате да стигнете докрай с подхода на заявката JSON, следното ще се мащабира много по-добре от оригиналното решение, тъй като ние свързваме всички дъщерни заявки и след това ги изпълняваме като една заявка:
con.task(async t => {
const posts = await t.any('SELECT *, avatar FROM post, users WHERE user = $1 AND user = alias ORDER BY time DESC LIMIT 10 OFFSET $2', [username, pos]);
const a = post => ({query: 'SELECT * FROM comment WHERE idPost = ${id}', values: post});
const queries = pgp.helpers.concat(posts.map(a));
await t.multi(queries)
.then(comments => {
posts.forEach((p, index) => {
p.comments = comments[index];
});
});
return posts;
})
.then(posts => {
res.send(posts);
})
.catch(error => {
console.log(error);
});
Вижте API:
- helpers.concat
- База данни.мулти