node express 评论接口,问题求助!

leyioliu
  • 24

如下,这是评论表数据
id 评论id
type 评论类型 对文章1,对用户2 评论
target_id 被评论者id
pid 为了关联评论,父id
from_id 评论者id
from_name 评论者昵称
。。。。。
image.png
我的思路是,

  1. 根据type和target_id先做查询,
    比如先拿文章类型type=1 和被评论者id target_id=002查询
    会查出三条数据 id为1,2,3的前三条
  2. 然后再根据from_id (评论者id),查询pid为from_id的数据
    比如pid为1111的下面有两条数据,分别是id为4,和6
    就把这两条数据插到一个children里放到1111下
  3. 同样同第二步,再查询 1114, 下面还有一条评论,把id为5的评论放到children里放到1114里

这样做合理吗,下面是部分中心代码,递归查询的时候存在问题

// 分页获取评论列表
function queryCommentList(req, res, next) {
  const err = validationResult(req);
  // 如果验证错误,empty不为空
  if (!err.isEmpty()) {
    // 获取错误信息
    const [{ msg }] = err.errors;
    // 抛出错误,交给我们自定义的统一异常处理程序进行错误返回
    next(boom.badRequest(msg));
  } else {
    let { pageSize, pageNo, target_id, type } = req.body;
    // 默认值
    pageSize = pageSize ? pageSize : 5; // 每页几条
    pageNo = pageNo ? pageNo : 1; // 第几页
    let start = (pageNo - 1) * pageSize; // 起始位置

    let query = `select * from comments_info where type = ${type} and target_id = ${target_id}  order by create_time desc  limit ${start},${pageSize}`;
    querySql(query).then((data) => {
      if (!data || data.length === 0) {
        res.json({
          code: CODE_ERROR,
          msg: "暂无数据",
          data: null,
        });
      } else {
        let need = recursiveFind(data);
        res.json({
          code: CODE_SUCCESS,
          msg: "查询数据成功",
          data: {
            data: [...data],
            pageNo: parseInt(pageNo),
            pageSize: parseInt(pageSize),
          },
        });
      }
    });
  }
}
// 递归查询程序
function recursiveFind(data) {
  for (let i = 0; i < data.length; i++) {
    let query = `select * from comments_info where pid = ${data[i].from_id} order by create_time desc`;
    querySql(query).then((reply) => {
      if (reply.length) {
        data[i].children = reply;
      } else {
        data[i].children = [];
      }
      // if(data[i].children.length) {
      //   recursiveFind(data[i].children)
      // }
    });
  }
  setTimeout(() => {
    console.log(data);
  }, 2000);
}
回复
阅读 629
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏