如何使用云数据库持久保存用户的数据(补充)

简介: 《如何在小游戏制作工具中使用云数据库持久保存用于的数据》的补充。付费文章是不允许复制和黏贴的,这个我是后来才知道的。所以,文中的代码无法进行复制,只能手动进行输入。另外还有一点儿就是文章中关于配置的部分遗漏了,导致了不少朋友跟我反应明明是照着教程做的,但是却报错了。所以,这篇补充文章主要是解决上述的这两个问题的。以下,为教程中使用到的三段代码。login云函数代码:

如何在小游戏制作工具中使用云数据库持久保存用于的数据》的补充。


付费文章是不允许复制和黏贴的,这个我是后来才知道的。所以,文中的代码无法进行复制,只能手动进行输入。


另外还有一点儿就是文章中关于配置的部分遗漏了,导致了不少朋友跟我反应明明是照着教程做的,但是却报错了。


所以,这篇补充文章主要是解决上述的这两个问题的。


以下,为教程中使用到的三段代码。


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 块钱是不是真的很超值。只要有人使用微信小游戏制作工具,只要涉及到云存储,那么终究绕不过这篇文章。


不过,即然已经如此定价了,就全当交个朋友了。如果你还没有关注我的公众号的话,那么赶紧的点击下方去关注一下吧!

相关文章
|
5天前
|
关系型数据库 MySQL 数据库
ORM对mysql数据库中数据进行操作报错解决
ORM对mysql数据库中数据进行操作报错解决
28 2
|
4天前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
|
6天前
|
Java 关系型数据库 MySQL
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术的房屋租赁系统,旨在通过自动化和信息化手段提升房屋管理效率,优化租户体验。系统采用JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Layui和Spring Boot 2.0等技术栈,实现了高效的房源管理和便捷的租户服务。通过该系统,房东可以轻松管理房源,租户可以快速找到合适的住所,双方都能享受数字化带来的便利。未来,系统将持续优化升级,提供更多完善的服务。
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
|
2天前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
10天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云数据库重磅升级!元数据服务OneMeta + OneOps统一管理多模态数据
|
20天前
|
SQL NoSQL Java
彻底革新你的数据库操作体验!Micronaut数据访问技巧让你瞬间爱上代码编写!
【9月更文挑战第10天】Java开发者们一直在寻找简化应用程序与数据库交互的方法。Micronaut作为一个现代框架,提供了多种工具和特性来提升数据访问效率。本文介绍如何使用Micronaut简化数据库操作,并提供具体示例代码。Micronaut支持JPA/Hibernate、SQL及NoSQL(如MongoDB),简化配置并无缝集成。通过定义带有`@Repository`注解的接口,可以实现Spring Data风格的命名查询。
42 6
|
2月前
|
SQL 存储 数据处理
"SQL触发器实战大揭秘:一键解锁数据自动化校验与更新魔法,让数据库管理从此告别繁琐,精准高效不再是梦!"
【8月更文挑战第31天】在数据库管理中,确保数据准确性和一致性至关重要。SQL触发器能自动执行数据校验与更新,显著提升工作效率。本文通过一个员工信息表的例子,详细介绍了如何利用触发器自动设定和校验薪资,确保其符合业务规则。提供的示例代码展示了在插入新记录时如何自动检查并调整薪资,以满足最低标准。这不仅减轻了数据库管理员的负担,还提高了数据处理的准确性和效率。触发器虽强大,但也需谨慎使用,以避免复杂性和性能问题。
31 1
|
2月前
|
安全 关系型数据库 数据库
FastAPI数据库操作秘籍:如何通过高效且安全的数据库访问策略,使你的Web应用飞速运转并保持数据完整性?
【8月更文挑战第31天】在构建现代Web应用时,数据库操作至关重要。FastAPI不仅简化了API创建,还提供了高效数据库交互的方法。本文探讨如何在FastAPI中实现快速、安全的数据处理。FastAPI支持多种数据库,如SQLite、PostgreSQL和MySQL;选择合适的数据库可显著提升性能。通过安装相应驱动并配置连接参数,结合ORM库(如Tortoise-ORM或SQLAlchemy),可以简化数据库操作。使用索引、批量操作及异步处理等最佳实践可进一步提高效率。同时,确保使用参数化查询防止SQL注入,并从环境变量中读取敏感信息以增强安全性。
69 1
|
2月前
|
缓存 运维 监控
打造稳定高效的数据引擎:数据库服务器运维最佳实践全解析
打造稳定高效的数据引擎:数据库服务器运维最佳实践全解析
下一篇
无影云桌面