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

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


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

相关文章
|
3月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
1月前
|
数据采集 数据库 Python
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
144 75
|
3月前
|
存储 监控 数据处理
flink 向doris 数据库写入数据时出现背压如何排查?
本文介绍了如何确定和解决Flink任务向Doris数据库写入数据时遇到的背压问题。首先通过Flink Web UI和性能指标监控识别背压,然后从Doris数据库性能、网络连接稳定性、Flink任务数据处理逻辑及资源配置等方面排查原因,并通过分析相关日志进一步定位问题。
282 61
|
2月前
|
SQL 存储 运维
从建模到运维:联犀如何完美融入时序数据库 TDengine 实现物联网数据流畅管理
本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品。文章从一个具体的业务场景出发,分析了企业在面对海量时序数据时的挑战,并提出了利用 TDengine 高效处理和存储数据的方法,帮助企业解决在数据采集、存储、分析等方面的痛点。通过这篇文章,作者不仅展示了自己对数据处理技术的理解,还进一步阐释了时序数据库在行业中的潜力与应用价值,为读者提供了很多实际的操作思路和技术选型的参考。
53 1
|
2月前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
2月前
|
前端开发 JavaScript 数据库
获取数据库中字段的数据作为下拉框选项
获取数据库中字段的数据作为下拉框选项
66 5
|
3月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
281 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
3月前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
3月前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
4月前
|
人工智能 Cloud Native 容灾
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?

热门文章

最新文章