温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
  • 忘记密码?
登录注册×
获取短信验证码
其他方式登录
点击 登录注册 即表示同意 《亿速云用户服务条款》
  • 服务器
  • 数据库
  • 开发技术
  • 网络安全
  • 互联网科技
登 录 注册有礼
最新更新 网站标签 地图导航
产品
  • 首页 > 
  • 教程 > 
  • 服务器 > 
  • 云计算 > 
  • 如何搭建论坛小程序

如何搭建论坛小程序

发布时间:2021-12-10 17:22:06 来源:亿速云 阅读:410 作者:柒染 栏目: 云计算


这篇文章给大家介绍如何搭建论坛小程序,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

个人感觉云开发带来的最大好处是鉴权流程的简化和对后端的弱化,所以像笔者这种从未接触过小程序开发的人也能够在周末两天时间内开发出一个功能完备、体验闭环的勉强能用的产品。

功能分析

如何搭建论坛小程序

该小程序功能目前较为简单(发布帖子、浏览帖子、发布评论),可用下图表示,无需赘述:

如何搭建论坛小程序

由架构图可知,云开发的数据库(存帖子、存评论)、存储(图片)、云函数(读、写、更新数据库等)都将涉及,很好地达到了练手的目的

发布帖子

如果帖子不带图片,直接写数据库即可,如果带图片则需要先存入图片到云开发提供的存储中,拿到返回的fileId(可理解为图片的url)再一并写入数据库,核心代码:

    for (let i = 0; i < img_url.length; i++) {
      var str = img_url[i];
      var obj = str.lastIndexOf("/");
      var fileName = str.substr(obj + 1)
      console.log(fileName)
      wx.cloud.uploadFile({
        cloudPath: 'post_images/' + fileName,//必须指定文件名,否则返回的文件id不对
        filePath: img_url[i], // 小程序临时文件路径
        success: res => {
          // get resource ID: 
          console.log(res)
          //把上传成功的图片的地址放入数组中
          img_url_ok.push(res.fileID)
          //如果全部传完,则可以将图片路径保存到数据库
          if (img_url_ok.length == img_url.length) {
            console.log(img_url_ok)
            that.publish(img_url_ok)
          }
        },
        fail: err => {
          // handle error
          console.log('fail: ' + err.errMsg)
        }
      })
    }

通过img_url_ok.length == img_url.length我们确定所有图片已经上传完成并返回了对应的id,然后执行写入数据库的操作:

  /**
   * 执行发布时图片已经上传完成,写入数据库的是图片的fileId
   */
  publish: function(img_url_ok) {
    wx.cloud.init()
    wx.cloud.callFunction({
      name: 'publish_post',
      data: {
        openid: app.globalData.openId,// 这个云端其实能直接拿到
        author_name: app.globalData.userInfo.nickName,
        content: this.data.content,
        image_url: img_url_ok,
        publish_time: "",
        update_time: ""//目前让 服务器自己生成这两个时间
      },
      success: function (res) {
        // 强制刷新,这个传参很粗暴
        var pages = getCurrentPages();             //  获取页面栈
        var prevPage = pages[pages.length - 2];    // 上一个页面
        prevPage.setData({
          update: true
        })
        wx.hideLoading()
        wx.navigateBack({
          delta: 1
        })
      },
      fail: console.error
    })
  },

通过wx.cloud.callFunction我们调用了一个云函数(通过name指定函数名),并将帖子内容content和图片image_url以及其他信息(发布者昵称、id等)一并传到云端。然后再看看这个云函数:

exports.main = async (event, context) => {
  try {
    return await db.collection('post_collection').add({
      // data 字段表示需新增的 JSON 数据
      data: {
        // 发布时小程序传入
        //author_id: event.openid,不要自己传,用sdk自带的
        author_id: event.userInfo.openId,
        author_name: event.author_name,
        content: event.content,
        image_url: event.image_url,
        // 服务器时间和本地时间会造成什么影响,需要评估
        publish_time: new Date(),
        // update_time: event.update_time,// 最近一次更新时间,发布或者评论触发更新,目前用服务器端时间
        update_time: new Date(),
        // 默认值,一些目前还没开发,所以没设置
        // comment_count: 0,//评论数,直接读数据库,避免两个数据表示同一含义
        watch_count: 3,//浏览数
        // star_count: 0,//TODO:收藏人数
      }
    })
  } catch (e) {
    console.error(e)
  }
}

可以看到,云函数写入了一条数据库记录,我们的参数通过event这个变量带了进来。

获取帖子列表

所谓获取帖子列表其实就是读上一节写入的数据库,但是我们并不需要全部信息(例如图片url),并且要求按照时间排序,如果熟悉数据库的话,会发现这又是一条查询语句罢了:

exports.main = async (event, context) => {
  return {
    postlist: await db.collection('post_collection').field({// 指定需要返回的字段
      _id: true,
      author_name: true,
      content: true,
      title: true,
      watch_count: true
    }).orderBy('update_time', 'desc').get(),//指定排序依据

  }
}

浏览帖子内容

浏览帖子内容及给定一个帖子的id,由帖子列表点击时带入:

  onItemClick: function (e) {
    console.log(e.currentTarget.dataset.postid)
    wx.navigateTo({
      url: '../postdetail/postdetail?postid=' + e.currentTarget.dataset.postid,
    })
  },

然后在云函数中根据这个id拿到全部数据:

exports.main = async (event, context) => {
  
  return {
    postdetail: await db.collection('post_collection').where({
      _id: event.postid
    }).get(),
  }
}

拿到全部数据后,再根据图片id去加载贴子的图片:

    // 获取内容
    wx.cloud.callFunction({
      // 云函数名称 
      name: 'get_post_detail',
      data: {
        postid: options.postid
      },
      success: function (res) {
        var postdetail = res.result.postdetail.data[0];
        that.setData({
          detail: postdetail,
          contentLoaded: true
        })
        that.downloadImages(postdetail.image_url)
      },
      fail: console.error
    })

这里that.downloadImages(postdetail.image_url)即加载图片:

  /**
   * 从数据库获取图片的fileId,然后去云存储下载,最后加载出来
   */
  downloadImages: function(image_urls){
    var that = this
    if(image_urls.length == 0){
      return
    } else {
      var urls = []
      for(let i = 0; i < image_urls.length; i++) {
        wx.cloud.downloadFile({
          fileID: image_urls[i],
          success: res => {
            // get temp file path
            console.log(res.tempFilePath)
            urls.push(res.tempFilePath)
            if (urls.length == image_urls.length) {
              console.log(urls)
              that.setData({
                imageUrls: urls,
                imagesLoaded: true
              })
            }
          },
          fail: err => {
            // handle error
          }
        })
      }
    }
  },

发表评论

发表评论和发布帖子逻辑类似,只是写入的数据不同,不做赘述。

关于如何搭建论坛小程序就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节
推荐阅读:
  1. LNMP架构搭建Discuz论坛(实战!)
  2. 初建LAMP架构、搭建论坛

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

小程序开发
  • 上一篇新闻:
    Nginx反向代理钓鱼怎么实现
  • 下一篇新闻:
    Nginx怎么封禁IP和IP段

猜你喜欢

  • 香港独立服务器的优势有哪些
  • 香港独立服务器的基本功能有哪些
  • ​云服务器的缺点有哪些
  • 使用云服务器有哪些优点
  • 云主机和虚拟主机的区别是什么
  • 云主机主要的三大优点是什么
  • 云主机购买需要注意哪些问题
  • 香港VPS与香港云主机有哪些区别
  • 云主机有哪些优势
  • 广东服务器租用常见故障怎么解决
最新资讯
  • Clojure在物联网领域的应用有哪些
  • 如何在Clojure中使用GraphQL
  • Clojure中有哪些加解密和安全相关的库
  • 如何在Clojure中实现国际化和本地化
  • 介绍Clojure的testing frameworks和库
  • Clojure在大数据处理领域的应用情况如何
  • 如何使用Clojure进行分布式计算
  • 解释Clojure中向量、列表、集合和映射的区别和用途
  • Clojure中的逻辑编程和规则引擎用法是什么
  • 如何在Clojure中处理XML和HTML数据
相关推荐
  • 技术论坛搭建项目
  • 用lnmp搭建discuz论坛
  • 基于LNMP架构搭建Discuz论坛
  • lamp论坛搭建
  • 开源论坛之discourse搭建
  • 小程序如何搭建
  • Linux中怎么搭建Discuz论坛
  • 云主机怎么搭建小程序
  • 微信商城小程序怎么搭建
  • 如何搭建微信小程序

相关标签

微信小程序 附近的小程序 微信小程序开发 小程序源码 支付宝小程序 小程序云开发 门店小程序 电商小程序 转小程序 商城小程序 微信小程序商城 微信小程序开发框架 python小程序 百度小程序 小程序码 小程序跳转 java函数 html转义 html5标签 ubuntu linux
AI

PHP网站源码洛阳网站优化按天计费公司泰安网站推广多少钱枣庄网站优化按天扣费廊坊网站制作设计报价张掖模板网站建设宜昌英文网站建设公司保定网站优化推广公司永湖百搜标王公司枣庄网页设计哪家好坂田企业网站制作价格洛阳百搜标王济源网站优化推荐垦利网站开发报价眉山百度竞价包年推广哪家好恩施企业网站建设哪家好苏州网站推广系统多少钱飞来峡网站推广价格舟山网站推广多少钱松原SEO按天扣费价格崇左模板推广哪家好乐山企业网站设计多少钱安庆seo网站推广价格曲靖优秀网站设计报价随州网站优化按天扣费推荐淮安企业网站建设价格上海网站建设设计推荐盐田百度网站优化排名公司北海企业网站制作哪家好连云港网站改版哪家好益阳网站开发报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化