微信云函数实现数据库访问

技术概述

调用微信云函数,通用用户openid,获取用户发布文章等相关信息并返回页面进行渲染。

技术详述

通过阅读微信官方的云函数文档,查阅其他资料完成编码。

显示页面代码

<navbar navbar-data='{{nvabarData}}' bindnavback='backToMycenter'></navbar>
<loading hidden="{{loadingHidden}}">
    加载中...
</loading>
<view class="in_pay_tapbar" bindtap="slidemove" >
      <image class="slide" animation="{{animation}}"src="../../images/income.png" mode='scaleToFill' ></image>
      <text class="income" style="color:{{incomecolor}}">未入选</text>
      <text class="expend" style="color:{{expendcolor}}">已入选</text>
    </view>
<block wx:if="{{condition}}" wx:for='{{chosenList}}' wx:key='id' wx:for-item="item">
    <image src="../../images/modification.png" class="modification"></image>
    <view class="content" catchtap="move2detail" data-index="{{item.id}}">
        <image src="../../images/beer.png" class="beer"></image>
        <view class="time">{{item.time}}</view>
        <view class="contenttype">{{item.type}}</view>
        <view class="contenttext">{{item.content}}</view>
    </view>
    
</block>
<block wx:if="{{condition1}}" wx:for='{{nonchosenList}}' wx:key='_id' wx:for-item="item">
    <image src="../../images/modification.png" class="modification"></image>
    <view class="content" catchtap="move2detail" data-index="{{item.id}}">
        <image src="../../images/right.png" class="right"></image>
        <view class="time">{{item.time}}</view>
        <view class="contenttype">{{item.type}}</view>
        <view class="contenttext">{{item.content}}</view>
    </view>
</block>

本地函数代码(调用云函数并且获取数据,渲染页面的数据)

  getChosen(){
    wx.cloud.callFunction({
      name:'getPost',
      data:{
        state:'1',   //1表示入选
      }
    }).then(res=>{
      console.log('入选请求成功', res)
      var content
      for(var i=0;i<res.result.length;i++){
        content = res.result[i].content
        content = content.length>maxLenth?content.slice(0,maxLenth)+"...":content
        this.setData({
          ["chosenList["+i+"].content"]:content,
          ["chosenList["+i+"].time"]:res.result[i].createTime,
          ["chosenList["+i+"].id"]:res.result[i]._id
        })
      }
    })
    .catch(err=>{
      console.log('已入选请求失败', err)
    })
  },

云函数代码,访问数据库,根据用户openid获取数据结果

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  // var openid = 'test01'
  var chosen 
  // state为1表示文章已入选, 0, 2表示未入选
  var state = event.state
  var openid = wxContext.OPENID
  if(state==='2'||state==='0'){
    await db.collection('post')
    .where({
      state:_.or(_.eq(0), _.eq(2)),
      userid:openid,
    })
    .get()
    .then(res=>{
      chosen = res.data
    })
    return chosen
  }
  await db.collection('post')
  .where({
    state:1,  
    userid:openid,
  })
  .get()
  .then(res=>{
    chosen = res.data
  })
  return chosen
}

流程图

image

问题和解决

问题:云函数修改之后运行并没有按照修改后的方式运行

解决:修改之后需要保存,并且部署到云端才能实现修改

总结

云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥。云函数在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码。

参考

微信云开发官方文档

posted @ 2021-06-26 15:33  硅与神经键  阅读(237)  评论(2编辑  收藏  举报