Как отобразить комментарий на 2 уровне как Facebook с comment_parent_id в Nodejs - PullRequest
0 голосов
/ 21 октября 2019

Я пишу комментарий 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"
                }
            }
        ]

Следовательно, это не то, что мне нужно, это трудно визуализировать для интерфейса.
Можете ли вы помочь мне этот код для решения этой проблемы. Пожалуйста, помогите мне, спасибо !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...