社区/学习指南/Web云开发应用实战指南

数独求解器

一个求解数独的工具,用云开发来做简单的使用次数和使用人数上报,还能实时监控,快来体验尝试吧
使用云开发的数据库、云函数,登录验证使用匿名登录。

创建云开发环境

一、新建【按量计费云开发环境】

进入腾讯云云开发控制台-创建环境,选择按量计费环境,环境名称可以自定义设置。如果已有按量计费环境则可以跳到下一步。
1.png

二、开通静态网站托管服务

进入进入静态网站控制页,选择刚才创建好的环境,开通静态网站托管服务。
2.png

三、创建数据库

进入数据库控制页,添加 1 个集合;集合名字为 shudu
3.png

点击集合名称,进入集合详情,在【权限设置】页中选择【所有用户可读,仅管理员可写】
31.png

四、开启匿名登录

进入环境设置页-登录授权的登录方式中,勾选匿名登录
4.png

下载并部署源码

一、下载源码

访问github 仓库,下载源码到本地。源码项目目录如下:
5.png

二、本地运行

将项目 webviews/index.html 以 http 的形式运行,可使用 IDE 工具 vscode,hbuilder。在浏览器的地址栏中确定 url 地址,比如例子中,域名地址为 127.0.0.1:5500
7.png

四、配置本地开发的安全域名

如果想在本地开发,必须要在云开发中配置本地的安全域名才能够正常调试开发。
进入环境设置页-安全配置,配置 WEB 安全域名,在这里以 127.0.0.1:5500 举例,请按照自己的实际域名配置
8.png

五、填写云开发环境 ID 到项目中

云开发是通过环境 ID 来判定与特定环境进行数据通信的,所以在项目中要配置所有的相关环境 ID 为自己的 ID。(建议熟练后,使用配置文件形式来配置)

  • 进入环境总览页,复制获取云开发环境 ID。
    9.png

  • 打开项目目录,将以下文件中标注有【云开发环境 ID】处替换成自己的云开发环境 ID

  • cloudfunctions/app/index.js 第 4 行
    10.png

  • cloudbaserc.js 第 2 行
    11.png

  • webviews/asset 下的 cloud.js 文件,第 2 行
    111.png

本地项目开发

一、说明

webviews/asset 下的 index.js 是本地数独求解工具有关的操作,包括判断数独正确,求解数独,显示解密的数盘等。
而 cloud.js 是外挂的云开发的相关支持。

关于 cloud.js 内的代码逻辑,请参照云开发文档学习和理解。

二、编写代码,开启历史记录和全网分数

在 asset/cloud.js 的 see 函数中修改为如下代码:

function see() {
  const watcher = app
    .database()
    .collection("shudu")
    .doc("FIRST")
    .watch({
      onChange: function (snapshot) {
        document.getElementById("numbershow").innerText =
          snapshot.docs[0].number;
        document.getElementById("peopleshow").innerText =
          snapshot.docs[0].people;
      },
      onError: function (err) {
        console.error("the watch closed because of error", err);
      },
    });
}

此代码执行数据库的实时监听,当数据库文档改变时,将会执行渲染最新的数据到页面中。

关于 app 云函数的源码如下(不需要编写,已有):

const tcb = require("@cloudbase/node-sdk");

const cloud = tcb.init({
  env: "lgy-199ef6",
});
const db = cloud.database();
const _ = db.command;
exports.main = async (event, context) => {
  let res = {};
  //获取用户信息
  const auth = cloud.auth().getUserInfo();
  //获取用户uid
  const uid = auth.uid;
  if (uid != null) {
    //从数据库中查找FIRST文档
    const result = (
      await db
        .collection("shudu")
        .where({
          _id: "FIRST",
        })
        .get()
    ).data;
    //如果有文档
    if (result.length != 0) {
      //构建预对象,执行number加1
      let updateitem = {
        number: _.inc(1),
      };
      //如果uid不在文档uid的列表中,新增添加people加1,并添加uid到列表
      if (result[0].uid.indexOf(uid)) {
        updateitem.people = _.inc(1);
        updateitem.uid = _.push([uid]);
      }
      //执行数据文档更新
      res.msg = await db.collection("shudu").doc("FIRST").update(updateitem);
    } else {
      //如果没有找到文档,则新增,将发起用户预装载进去
      res.msg = await db.collection("shudu").add({
        _id: "FIRST",
        number: 1,
        people: 1,
        uid: [uid],
      });
    }
    res.code = 0;
  } else {
    res.code = 404;
  }
  return res;
};

配置云函数

一、安装依赖

在 cloudfunctions/gobangdelete 下右键在终端打开
18.png

在终端中输入以下命令,安装依赖:

 npm i @cloudbase/node-sdk
三、部署云函数

在 cloudfunctions/app 目录,右键执行部署云函数(上传全部文件)。在一开始使用时会出现登录,按照提示完成登录步骤即可。【如果没有此选项,请前往云开发 VSCODE 插件安装并学习使用】
20.png

本地测试项目可用性

一、重新启动项目,进入页面

在数字盘中输入数独谜题,可以输入 1-81 个,然后点击数独求解,即可求出数独
23.png

每次求解都会自动上报,然后更新到页面中,其他人的解决也会在页面中更新

三、总结

如果本地验证都没有问题,则配置没有问题。如果出现任何一个步骤的错误提示,则 F12 控制台查看并排除原因,一般是环境 ID 写错错误导致。

上传至静态存储

将本地验证成功的项目上传至静态存储中。在 webviews 目录右键点击,上传至静态网站根目录
31.png

进入云开发静态网站管理页,可以看到已上传的项目。
32.png

进入云开发静态网站设置页,访问默认域名网址即可进入线上项目
33.png

34.png

关于自定义域名和网站对外开放

云开发提供了完备的 web 端资源服务,但是一个对外公开使用的 web 项目需要有自己的备案域名,需要受到监管。所以,在正式对外推出之前,需要将云开发提供的默认域名替换成自己已经备案的域名

  • 前往云开发静态网站设置页,在【域名信息】下点击添加域名按钮,填写已经备案的域名。域名需要配有 SSL 证书,腾讯云下域名会自动监测证书;如果是非腾讯云旗下域名,则需要上传 SSL 证书。
  • 需要等待域名添加状态为【已启动】后,才可以去域名解析中配置 CNAME。
  • 前往环境设置页-安全配置,在 WEB 安全域名中删除云开发的默认域名,只保留自定义域名。
  • cloudfunctions/functions/getFile/index.js 的 AllowOriginList 数组中,将默认域名更换成自定义域名,保存更新。

附件

本文出自 云开发团队