uniapp+node.js前后端做帖子模块:查看帖子(获取帖子详情以及对应的帖子评论列表)(社区管理平台的小程序)

news/2024/7/20 2:19:14 标签: uni-app, node.js, 小程序

目录

  • 0前提
  • 1.一些准备
    • 1.1表
      • 帖子表 post
      • 帖子评论表 postComment
    • 1.2总体思路
  • 2.前端
  • 3.后端


👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!


0前提

温馨提示:我做的思路可能是复杂化了或者说代码写的不规范,如果你觉得可以更加简便的话欢迎分享到评论区或者自己改写一下我的代码,我的后端是写的很简单的没有什么路由分发是直接写的,你可以自由优化
小程序的其他部分你可以看看我往期的文章

1.一些准备

1.1表

帖子表 post

字段名称类型(长度)允许空主键外键自增唯一说明
idint帖子id
titlevarchar(20)标题
contentvarchar(20)内容
imagesvarchar(200)详情表
classificationvarchar(20)帖子分类
likesint点赞数
commentsint评论数
sharesint分享数
userIdint用户id
communityIdint小区id
creatTimetimestamp创建时间
updateTimetimestamp数据改变时的时间

帖子评论表 postComment

字段名称类型(长度)允许空主键外键自增唯一说明
idint帖子评论id
contentvarchar(20)内容
imagesvarchar(200)详情表
postIdint帖子id
userIdint用户id
creatTimetimestamp创建时间
updateTimetimestamp数据改变时的时间

1.2总体思路

描述:当用户点击帖子之后进入帖子详情页面出现帖子的详情以及这个帖子下方出现对应的帖子评论列表
实现:首先要接受上一个页面传来的帖子id参数以及用到用户id(判断这个帖子被当前用户点赞了),用这2个数据发送给后端,后端根据接收到的参数去数据库表里拿数据返回回来

2.前端

前端:页面加载时先获取url参数的帖子id和获取全局变量中的用户id后调用方法

代码实现:
需要在页面的onload上增加

  onLoad(option) {
    const postId = option.id;// 从 URL 参数中获取 postId
    const userId = this.$store.state.user.id; // 获取当前用户ID
    this.getPostDetails(postId, userId);
  },

加上一个查看帖子的方法

//获取帖子详情的信息
    async getPostDetails(postId, userId) {
        const res = await this.$myRequest({
          method: 'get',
          url: `/getPostDetails?postId=${postId}&userId=${userId}`
        });
        if (res.data) {
          this.post = res.data;
        }
      },

3.后端

后端:当接受到前端传来的信息之后到数据库里查询帖子信息以及这个帖子对应的发帖者的头像和昵称,再查询完帖子详情之后去查询对应的帖子评论列表添加到帖子中然后返回信息
代码实现:

// 获取帖子详情
app.get('/getPostDetails', (req, res) => {
  const postId = req.query.postId;
  const userId = req.query.userId; // 当前用户ID,用于判断是否点赞
  connection.query(
    'SELECT post.*, user.name AS nickname, user.avatar,COUNT(pl.id) AS likesByCurrentUser ' +
    'FROM post ' +
    'INNER JOIN user ON post.userId = user.id ' +
    'LEFT JOIN postLike pl ON post.id = pl.postId AND pl.userId = ? ' +
    'WHERE post.id = ?',
    [userId, postId],
    (error, results) => {
      if (error) {
        console.error(error);
        return res.status(500).json({
          error: 'false'
        });
      }
      if (results.length === 0) {
        // 没有找到对应的帖子
        return res.status(404).json({
          error: 'Post not found'
        });
      }
      const post = results[0];
      // 处理帖子的图片字段,将逗号分割的字符串转为数组
      post.images = post.images.split(',');
      post.createTime = results.map(post => {
        post.createTime = formatTime(post.createTime); // 使用新的格式化时间字段
        return post;
      });
      // 获取帖子评论列表
      connection.query(
        'SELECT pc.*, user.name AS nickname, user.avatar ' +
        'FROM postComment pc ' +
        'INNER JOIN user ON pc.userId = user.id ' +
        'WHERE pc.postId = ? ' +
        'ORDER BY pc.createTime DESC',
        [postId],
        (commentError, commentResults) => {
          if (commentError) {
            console.error(commentError);
            return res.status(500).json({
              error: 'false'
            });
          }
          // 将评论结果添加到帖子详情中
          post.commentList = commentResults.map(comment => {
            comment.createTime = formatTime(comment.createTime);// 使用新的格式化时间字段
            return comment;
          });
          // 判断当前用户是否已经点赞了帖子
          post.isLiked = post.likesByCurrentUser > 0;
          // 返回帖子详情
          return res.json(post);
        }
      );
    }
  );
});

http://www.niftyadmin.cn/n/5416924.html

相关文章

Junit 超时测试

超时测试 1.什么是超时测试? 看被测试方法是否在规定的时间内执行完 除了要保证结果争取还要保证在规定的时间内执行完 就像考试那样 不仅要求结果正确还得在规定的时间内写完 被测试方法执行时间>规定时间⇒测试不通过 被测试方法执行时间<规定时间⇒测试通过 2.超…

股票价格预测项目

项目介绍 背景 股票价格预测一直是金融领域的热点问题。准确的预测可以帮助投资者作出更明智的决策。本项目旨在使用机器学习技术&#xff0c;特别是长短期记忆网络&#xff08;LSTM&#xff09;&#xff0c;来预测股票价格。 目标 开发一个基于LSTM的股票价格预测模型。使…

在线部署ubuntu20.04服务器,安装jdk、mysql、redis、nginx、minio、开机自启微服务jar包

一、服务器 1、查看服务器版本 查看服务器版本为20.04 lsb_release -a2、服务器信息 服务器初始账号密码 sxd / 123456 首先,更改自身密码都输入123456 sudo passwd 创建最高权限root账号&#xff0c;密码为 123456 su root 3、更新服务器源 1、更新源列表 sudo apt-g…

阿里云服务器地域怎么选?买前必看的四大考虑因素

阿里云服务器地域选择方法&#xff0c;如何选择速度更快、网络延迟更低的地域节点&#xff0c;地域指云服务器所在的地理位置区域&#xff0c;地域以城市划分&#xff0c;如北京、杭州、深圳及上海等&#xff0c;如何选择地域&#xff1f;建议根据用户所在地区就近选择地域&…

【MySQL】关于 MySQL 的连接与用户

关于 MySQL 的连接与用户 大家日常使用 MySQL &#xff0c;或者说刚刚搭好环境的时候&#xff0c;最常要配置的就是连接以及用户相关的操作&#xff0c;今天我们就来简单地学习一下 MySQL 中的连接方式以及用户相关的操作。最后&#xff0c;我们还会看几个小命令&#xff0c;可…

机器学习的魔法(二)超越预测的界限-揭秘机器学习的黑科技-探索监督学习中的回归和分类问题

前面我们提到了监督学习的概念&#xff0c;现在我们来回顾一下&#xff0c;什么是监督学习。 监督学习指的是&#xff1a;我们给学习算法一个数据集&#xff0c;这个数据集由正确答案组合而成&#xff0c;然后机器运用学习算法&#xff0c;算出更多的正确答案。 1、监督学习之…

【论文精读】【DETR】End-to-End Object Detection with Transformers

End-to-End Object Detection with Transformers 0.论文摘要 我们提出了一种新的方法&#xff0c;将目标检测视为一个直接的集合预测问题。我们的方法简化了检测管道&#xff0c;有效地消除了对许多手工设计组件的需求&#xff0c;如非极大抑制程序或锚生成&#xff0c;它们…

网络原理初识(1)

目录 一、网络发展史 1、独立模式 2、网络互联 3、局域网LAN 局域网组建的方式 1、基于网线直连 2、基于集线器组建 3、基于交换机组建 4、基于交换机和路由器组建 4、广域网WAN 二、网络通信基础 1、IP地址 2、端口号 3、认识协议 4、五元组 都看到这了&#xff0c;点个…