【Chapter4】创建操作数据库的云函数


一、简介

一开始我是直接对数据库进行操作,之后才发现有两个坑

  • 操作权限
    本地操作数据库,不同openid的用户无法操作其他openid用户的数据
    小程序提供四种权限模式:
    在这里插入图片描述
    也就是在小程序端操作数据库,默认会根据openid去索引!

  • 操作数量
    小程序端获取数据库数量,最多一次取20条信息,而云端则最多可取100条。这样也就产生了多次循环读取后进行数据合并(在上篇文章讲到)

最终,基于以上两点,还是使用云端操作吧。接下来讲讲怎么制作一个操作数据库的云函数。


二、方法

1、创建

在cloudfunctions里,新建Node.js函数。命名为runDB
在这里插入图片描述

2、复制代码

// runDB云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()
const db = cloud.database()
const _ = db.command

// 云函数入口函数
exports.main = async (event, context) => {
  const targetDB = db.collection(event.db)
  try {
    console.log(event);
    if (event.type == "insert") {
      return await targetDB.add({
        data: event.data,
        success: res => {
          console.log("添加纪录成功", res);
        },
        fail: res => {
          console.log("添加纪录失败", res);
        }
      })
    }

    if (event.type == "update") {
      return await targetDB.doc(event.indexKey).update({
        data: event.data
      })
    }

    if (event.type == "delete") {
      return await targetDB.doc(event.indexKey).remove()
    }

    if (event.type == "get") {
      return await targetDB.where({event.condition}).limit(100).skip(event.skip).orderBy(event.order, 'desc').get()
    }
	
	//输入数组,进行多个数据操作,以上都是单个操作,此外limit和orderBy都可以去掉(如果不需要的话)
    if (event.type == "getArr") {
      return await targetDB.where({ _id: _.in(event.idArr) }).limit(100).skip(event.skip).orderBy(event.order,'desc').get()
    }

  } catch (e) {
    console.error(e)
  }
  
}

3、安装

如果没有node,需要先去下载node
node 官网
下载完,打开cmd,输入node -v 和 npm -v,如果有版本信息则安装成功

右键点击runDB,在终端打开,输入

npm install --save wx-server-sdk@latest

在这里插入图片描述
安装完成后,会出现pakages-lock.json文件。

4、上传

在这里插入图片描述

5、使用

在page需要的地方调用云函数进行数据库操作,以get举例。

wx.cloud.callFunction({
      name: 'runDB',
      data: {
        type: "get", //指定操作 
        db: "comments", //指定操作的数据表
        condition: topicID:app.globalData.id, //可以填写不同的搜索依据
        skip: 0,
        order: app.globalData.setOrder,
      },
      success: res => {
        console.log('显示回答', res)
        this.setData({ queryResult: res.result.data }) //注意。这里是res.result.data,与程序端不同
      },
      fail: err => {
        console.error('显示回答失败', err)
      }
    })

6、注释

  • 如果你修改云函数,需要再次上传。
  • 如果出现data为null,requiresID,那么重新上传云函数,或者等一小会(最有效是重新上传)
  • 如果还是出现问题,检查一下是否云函数逻辑写错,或者使用时填写的条件错了。

最后还是例行一段:

最近用了一周写了一个仿知乎的小程序,将会陆续整理,包括前端页面设计与后端逻辑、数据库和云函数操作等,以及自己遇到的坑。之前也没有学过javascript和数据库,css和html大概知道,用了一天看数据库、php、vue,后来为了设计美观,用一早上看css和html,就可以开始做了,所以算是零基础的新手训练哦。感兴趣就关注吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值