Я пишу комментарий API show и его ответы с 2-го уровня в качестве комментария Facebook. У меня есть структура базы данных, как показано ниже
--------------------------------------------------------------
id | userid | productid | parent_comment_id | content |
--------------------------------------------------------------
1 | 1 | 2 | null | this parent |
2 | 2 | 2 | 1 | this is child |
3 | 3 | 2 | 1 | this is child |
--------------------------------------------------------------
Я пытаюсь отобразить стиль комментариев Facebook, например:
comment userid 1
reply of userid 2
reply of userid 3
Я использую Nodejs для написания API. Я хочу, чтобы API показывал комментарии и их ответы, как показано ниже
"comments": [
{
"id": 1,
"usersid": 1,
"productsid": 2,
"commentsid": null,
"content": "this parent",
"user": {
"username": "user 1"
},
"replies" : [
{
"id": 2,
"usersid": 2,
"productsid": 2,
"commentsid": 1,
"content": "this is child",
"user": {
"username": "user 2"
}
},
{
"id": 3,
"usersid": 3,
"productsid": 2,
"commentsid": 1,
"content": "this is child",
"user": {
"username": "user 3"
}
}
]
}
]
Однако это мой код, и результат не может быть ожидаемым, как я хочу.
module.exports.viewCommentOfProduct = (req, res, next)=>{
productComments.findAll({
include: {
model: Users,
attributes: ['username']
},
where: {
productsid: req.params.id,
commentsid: null
}
})
.then(async comments=>{
var reps = [];
for(let i = 0; i < comments.length; i++){
// console.log(comments[i].id);
let replyResult = await productComments.findAll({
include: {
model: Users,
attributes: ['username']
},
where: {
commentsid: comments[i].id
}
})
reps.push(replyResult);
}
res.json({
comments: comments,
replies: reps
})
})
.catch(err=>{
res.json('Err: '+ err);
})
}
Во-первых, я нахожу все parent_comment (у которого parent_comment_id равен нулю). После этого я использую цикл for, чтобы найти все комментарии, которые отвечают parent_comment_id, и отправить его в массив. Тем не менее, я не могу написать API, как я хочу. Результат только как
"comments": [
{
"id": 1,
"usersid": 1,
"productsid": 2,
"commentsid": null,
"title": "This is parent",
"user": {
"username": "user 1"
}
}
],
"replies": [
{
"id": 2,
"usersid": 2,
"productsid": 2,
"commentsid": 6,
"content": "This is child",
"user": {
"username": "user 2"
}
},
{
"id": 3,
"usersid": 3,
"productsid": 2,
"commentsid": 6,
"content": "This is child",
"user": {
"username": "user 3"
}
}
]
Следовательно, это не то, что мне нужно, это трудно визуализировать для интерфейса.
Можете ли вы помочь мне этот код для решения этой проблемы. Пожалуйста, помогите мне, спасибо !!!