一、简介
一开始我是直接对数据库进行操作,之后才发现有两个坑
-
操作权限
本地操作数据库,不同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,就可以开始做了,所以算是零基础的新手训练哦。感兴趣就关注吧