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

简介: 这篇文章是针对于之前写的一篇付费文章《如何在小游戏制作工具中使用云数据库持久保存用于的数据》的补充。

这篇文章是针对于之前写的一篇付费文章《如何在小游戏制作工具中使用云数据库持久保存用于的数据》的补充。


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


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


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


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


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的依赖。

640.png


第二步,点击下方的“保存并安装依赖”按钮,后台会自动的安装所需的依赖。安装完成后在目录中会看到一个“node_modules”的文件夹。

640.png


最后,如果你的云函数中没有“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天前
|
文字识别 负载均衡 算法
视觉智能开放平台产品使用合集之人脸数据库已创建超过1000个人脸数据,怎么开通更多人脸数据库
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
4天前
|
SQL 关系型数据库 数据管理
数据管理DMS产品使用合集之归档数据至其它MySQL数据库时,如何指定目的库
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
16 1
|
6天前
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用问题之要验证MySQL迁移后的数据库数据与迁移前的数据一致性,该怎么办
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
PolarDB产品使用问题之要验证MySQL迁移后的数据库数据与迁移前的数据一致性,该怎么办
|
8天前
|
JSON 前端开发 JavaScript
SSMP整合案例第五步 在前端页面上拿到service层调数据库里的数据后列表
SSMP整合案例第五步 在前端页面上拿到service层调数据库里的数据后列表
15 2
|
8天前
|
SQL druid Java
传统后端SQL数据层替代解决方案: 内置数据源+JdbcTemplate+H2数据库 详解
传统后端SQL数据层替代解决方案: 内置数据源+JdbcTemplate+H2数据库 详解
13 1
|
9天前
|
分布式计算 大数据 数据处理
MaxCompute操作报错合集之odps数据库T1有几百行的数据,为什么出来只有5行的数据
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
11天前
|
存储 关系型数据库 MySQL
关系型数据库mysql数据文件存储
【6月更文挑战第15天】
19 4
|
12天前
|
Java 数据库连接 数据库
实现Spring Boot与MyBatis结合进行数据库历史数据的定时迁移
实现Spring Boot与MyBatis结合进行数据库历史数据的定时迁移
26 2
|
11天前
|
SQL 数据库
零基础学习数据库SQL语句之操作表中数据的DML语句
零基础学习数据库SQL语句之操作表中数据的DML语句
15 0
零基础学习数据库SQL语句之操作表中数据的DML语句
|
16天前
|
存储 NoSQL 算法
图数据库:连接数据的新模式
【6月更文挑战第16天】图数据库是处理复杂关系数据的新兴技术,使用节点、边和属性表示数据间关系。它提供强大的关系表达能力、灵活性、实时性和扩展性。新模式包括关系网络可视化、基于路径的查询、内置图算法支持,适用于推荐系统和社交网络分析,助力企业挖掘数据价值并应对大数据时代挑战。随着技术发展,图数据库将在数据连接和分析中扮演关键角色。