这篇文章是针对于之前写的一篇付费文章《如何在小游戏制作工具中使用云数据库持久保存用于的数据》的补充。
付费文章是不允许复制和黏贴的,这个我是后来才知道的。所以,文中的代码无法进行复制,只能手动进行输入。
另外还有一点儿就是文章中关于配置的部分遗漏了,导致了不少朋友跟我反应明明是照着教程做的,但是却报错了。
所以,这篇补充文章主要是解决上述的这两个问题的。
以下,为教程中使用到的三段代码。
login云函数代码:
const cloud = require('wx-server-sdk') const request = require('request') // 初始化 cloud cloud.init({ // API 调用都保持和云函数当前所在环境一致 env: cloud.DYNAMIC_CURRENT_ENV }) exports.main = async (event, context) => { var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=APP_ID&secret=APP_SEECRET&js_code=' + event.queryStringParameters.code + '&grant_type=authorization_code'; return new Promise((resolve, reject) => { request(url, function (error, response, body) { if (response && response.statusCode === 200) { resolve(body); } else { reject(error); } }); }); }
uploadData云函数代码:
// 云函数入口文件 const cloud = require('wx-server-sdk'); // 与小程序端一致,均需调用 init 方法初始化 cloud.init({ // API 调用都保持和云函数当前所在环境一致 env: cloud.DYNAMIC_CURRENT_ENV }) // 可在入口函数外缓存 db 对象 const db = cloud.database(); // 云函数入口函数 exports.main = async (event, context) => { // 拿到用户的id以及需要存储的得分数据 const docId = event.queryStringParameters.openid; const score = event.queryStringParameters.score; const level = event.queryStringParameters.level; const coin = event.queryStringParameters.coin; const challangeday = event.queryStringParameters.challangeday; const flowerlevel = event.queryStringParameters.flowerlevel; const flowertimes = event.queryStringParameters.flowertimes; //拿到执行的集合playerdata const dataCol = db.collection("playerdata"); let userRecord; //查询当前集合中是否已有该用户的记录 try { const queryResult = await dataCol.doc(docId).get(); userRecord = queryResult.data; } catch (err) { // 用户第一次上传分数 console.log("没当前用户的分数记录,用户第一次上传分数") } //如果有用户记录,进行更新 if (userRecord) { //更新用户数据 const updateResult = await dataCol.doc(docId).update({ data: { score: score, level: level, coin: coin, challangeday: challangeday, flowerlevel: flowerlevel, flowertimes: flowertimes } }); if (updateResult.stats.updated === 0) { // 没有更新成功,更新数为 0 return { success: 0, } } return { success: 1, } } else { // 如果没有用户记录,则创建新的用户记录 await dataCol.add({ // data 是将要被插入到 score 集合的 JSON 对象 data: { // 这里指定了 _id,如果不指定,数据库会默认生成一个 _id: docId, score: score, level: level, coin: coin, challangeday: challangeday, flowerlevel: flowerlevel, flowertimes: flowertimes } }) return { success: 1, } } }
searchData云函数代码:
// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init({ // API 调用都保持和云函数当前所在环境一致 env: cloud.DYNAMIC_CURRENT_ENV }) // 可在入口函数外缓存 db 对象 const db = cloud.database() // 云函数入口函数 exports.main = async (event, context) => { // 使用用户的openid作为id const docId = event.queryStringParameters.openid; console.log("openid:", docId); const dataCol = db.collection("playerdata"); let userRecord; try { const queryResult = await dataCol.doc(docId).get() userRecord = queryResult.data } catch (err) { console.log("没当前用户的分数记录") return{ success:0, } } //如果有用户记录,增进行更新 if (userRecord) { console.log("找到用户记录"); return { success:1, data:userRecord, } } else { console.log("没有用户记录"); return { success: 0, } } }
*注:以上所有云函数代码均为我的游戏“精致1010”中所使用的代码,你需要根据自己游戏的具体情况做出一些对应的修改。
下方是关于云函数的配置。
第一步,找到“package.json”文件,增加微信sdk(wx-server-sdk)的依赖。很多朋友最后运行报错,都是因为没有增加微信sdk的依赖。
第二步,点击下方的“保存并安装依赖”按钮,后台会自动的安装所需的依赖。安装完成后在目录中会看到一个“node_modules”的文件夹。
最后,如果你的云函数中没有“package.json”文件的话,可以新建一个,然后把下方的配置代码黏贴进去。
{ "name": "login", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "wx-server-sdk": "~2.5.3" } }
先前的关于云存储的付费文章只以 1 元的价格出售,现在想想简直是太超值了。我使用了整整 2 天的时间去研究云函数,云存储,去试验尝试,最终整理成教程。购买文章的朋友相当于以 1 元钱的价格购买了我两天的时间,另外,更重要的是为自己省下了两天或者更多摸索的时间。
想一想这 1 块钱是不是真的很超值。只要有人使用微信小游戏制作工具,只要涉及到云存储,那么终究绕不过这篇文章。
不过,即然已经如此定价了,就全当交个朋友了。如果你还没有关注我的公众号的话,那么赶紧的点击下方去关注一下吧!