全网小程序·云开发·云数据的增删查改实战案例

436 阅读3分钟

记录一下自己最近自己在做云开发的留言功能,里面包括用户端的留言,和管理员看的留言列表功能,管理员未读和已读功能

首先这个先讲用户留言功能,留言包括了留言内容、上传图片、手机号、邮箱

云数据库添加功能

添加这里有两种方法,一种是直接在js里面添加到数据库,一种是通过云函数添加到数据库

云函数添加到数据库

页面的js部分

let form = {
  content: this.data.content,
  email: this.data.email,
  phone: this.data.phone,
  imgname: this.data.imagePath?this.data.imagePath: '',
  readState: 1,
  randnum: this.rand(1000,9999),
  nickName: info.nickName
}
wx.showLoading({
      title: '正在提交',
    });
    wx.cloud
        .callFunction({
          name: 'feedback',
          data: {
            ...form,
          },
        })
        .then(() => {
          wx.hideLoading();
          this.closeToptip = $wuxToptips().success({
            hidden: false,
            text: '您的反馈已收到,我们会尽快处理!',
            duration: 150000,
            success: () => {
              this.closeToptip = null;
            }
          })
          
          this.setData({
            imagePath: '',
            content: '',
            email: '',
            phone: ''
          });
        })
        .catch(() => {
          wx.hideLoading();
          wx.showToast({
            title: '提交失败',
            icon: 'success',
            duration: 2000,
          });
        });

feedback云函数

const cloud = require('wx-server-sdk');
cloud.init();
const db = cloud.database();

function format(date) {
  return date.getFullYear() + '-' + parseZero(date.getMonth() + 1) + '-' + parseZero(date.getDate()) + ' ' 
    + parseZero(date.getHours()) + ':' + parseZero(date.getMinutes()) + ':' + parseZero(date.getSeconds())
}

function parseZero(num) {
  return num < 10 ? '0' + num : num;
}

exports.main = async event => {
  try {
    const {OPENID} = cloud.getWXContext();
    console.log('OPENID',OPENID)
    // 在云开发数据库中存储用户订阅的信息
    const result = await db.collection('messages').add({
      data: {
        ...event,
        touser: OPENID,
        cretime: format(new Date(new Date().getTime() + 8 * 60 * 60 * 1000))
      },
    });
    return result;
  } catch (err) {
    console.log(err);
    return err;
  }
};

js里面添加到数据库

let form = {
  content: this.data.content,
  email: this.data.email,
  phone: this.data.phone,
  imgname: this.data.imagePath?this.data.imagePath: '',
  readState: 1,
  randnum: this.rand(1000,9999),
  nickName: info.nickName
}
const db = wx.cloud.database();
    /**
     * 向集合counters中添加数据
     */
    db.collection('messages').add({
        data:{
            ...form
        }
    })
    .then(res=>{
        console.log(res)
    })

云数据库查询功能

查询又分为查询全部,带条件查询(doc与where)两个条件语句

强调说明一下如果数据库不是自己创建的话,一定要修改数据库的权限,改成所有用户可读,不然是查不出数据

查询全部数据

 db.collection('messages').get({
    //如果查询成功的话    
    success: res => {
      console.log('messages', res)
      //这一步很重要,给ne赋值,没有这一步的话,前台就不会显示值      
      if(res.data.length>0) {
        this.setData({
          conList: res.data.reverse()
        })
      }
    },
    fail: err => {
      console.log('err', err)
    }
})

查询带条件doc

如果用doc的话,那只能用云数据库的"_id"值进行查询,从页面点击带_id参数就可以了,

db.collection('messages').doc('_id值进行查询').get({
    //如果查询成功的话    
    success: res => {
      console.log('messages', res)
      //这一步很重要,给ne赋值,没有这一步的话,前台就不会显示值      
      if(res.data.length>0) {
        this.setData({
          conList: res.data.reverse()
        })
      }
    },
    fail: err => {
      console.log('err', err)
    }
})

查询带条件where

如果用where的话,就可以多字段查询

db.collection('messages').where({
	content: this.data.content,
  	email: this.data.email,
}).get({
    //如果查询成功的话    
    success: res => {
      console.log('messages', res)
      //这一步很重要,给ne赋值,没有这一步的话,前台就不会显示值      
      if(res.data.length>0) {
        this.setData({
          conList: res.data.reverse()
        })
      }
    },
    fail: err => {
      console.log('err', err)
    }
})

云数据库修改功能 (可以用doc或者where进行查询数据之后在更新)

如果用doc查询的话只能用"_id值",不然查不到数据,

db.collection('Evaluation').doc('_openid').update({
    data:{
        dislike:_.unshift('dishName')
    },
    success(res) {
        console.log(res.data)
    }
})

云数据修改功能用到了update方法,数据库不是自己创建的话不是自己创建的不会自动生成_openid字段,系统认为你不是创建者,更新不到数据库

强调说明一下如果数据库不是自己创建的话,要添加_openid字段(注意前面有个下划线),值就是你自己的openid
如果你是批量导又不想添加_openid字段的话,既然时因为权限问题,那就增加操作权限;打开云开发控制台,从控制台上选择操作数据表的数据权限配置如图:

需要注意的是最后一项自定义安全规则 ,并点击右侧修改它为下面内容:

{
  "read": true,
  "write": true
}

云数据库删除功能

云数据删除功能用到了remove方法,如果用doc查询的话只能用"_id值",不然查不到数据,

const db = wx.cloud.database();
	 /**
     * 删除集合messages中的数据
     */
   	db.collection('messages').doc('XIjKR97E7L4wsc48').remove().then(res=>{
    	console.log(res)
  	})

总结

在做留言云开发也是从零开始看文档,百度、看视频,感谢分享文章和视频的博主,谢谢你们的分享,就是因为你们才让我知道,在分享技术的同时自己也是不断在总结自己这段时间的成果,也让自己越来越好,

最后看了的朋友觉得有帮助的话,给我点个赞,谢谢了!!