技术背景

借助云开发数据库的实时推送能力和云开发官方出品的前后端一体化部署工具CloudBase Framework,可以轻松搭建一个完整应用。

效果展示

示例地址:http://cloud.qinmudi.cn/watch-todolist

项目开发

1.开发前准备

1.1 腾讯云 CloudBase 的按量计费环境

我们要部署静态网站,因此,需要提前准备按量计费环境。

1.2 项目创建

使用 CloudBase Framework 创建一个 vue 应用。

具体操作,参见:如何用 Cloudbase Framework 部署一个 Vue 项目?

2.项目开发

2.1 创建数据库集合

两种创建方式,任选。

2.1.1 手动创建

打开云开发控制台,手动创建 watch-todos 集合

2.1.2 插件方式创建

配置 cloudbaserc.json

{
"envId": "your envId",
"framework": {
"plugins": {
"client": {
"use": "@cloudbase/framework-plugin-website",
"inputs": {
"buildCommand": "npm run build",
"outputPath": "dist",
"cloudPath": "/watch-todolist"
}
},
"database": {
"use": "@cloudbase/framework-plugin-database",
"inputs": {
"collections": [
{
"collectionName": "watch-todos"
}
]
}
}
}
}
}

请注意 database 部分的配置。

这里,"database"是自定义的名称,你可以配置成任何你喜欢的名字~

之后,在 package.json 中,相应配置部署的 script 脚本即可。

比如,我们这里配置了:

{
"scripts": {
"deploy:database": "cloudbase framework:deploy database"
}
}

配置完成后,执行:

yarn deploy:database

or

npm run deploy:database

进行部署,云数据库中,就会自动生成 watch-todos 集合。

2.2 tcb-js-sdk 引入

yarn add tcb-js-sdk

or

npm install tcb-js-sdk

2.3 创建 tcb 接入层

2.3.1 用户登录与数据库实例获取

【注】

获取数据库实例,必须先进行登录授权,否则无法获取。

为了便于演示,这里采用匿名登录方式。

具体实现如下:

【step1】云开发控制台开启匿名登录:

【step2】tcb/index.js

import tcb from 'tcb-js-sdk';
import $config from '../../cloudbaserc'; // 初始化
const app = tcb.init({
env: $config.envId,
}); const auth = app.auth(); let db = null; async function login() {
await auth.signInAnonymously();
// 匿名登录成功检测登录状态isAnonymous字段为true
const loginState = await auth.getLoginState();
console.log(loginState.isAnonymousAuth); // true
return app.database();
} function getDB() {
if (!db) {
db = login();
}
return db;
} export default getDB;

2.3.2 增删改查逻辑开发

tcb/service.js

import $getDB from './index';

// 正确数据
const data = {
code: 0,
data: null,
msg: 'success',
}; // 操作失败数据
function getFailData(msg) {
return {
code: -1000,
data: null,
msg,
};
} // 发生错误数据
function getErrorData(err) {
return {
code: -4000,
data: null,
msg: err.message,
};
} // 数据库集合获取
async function getCollection() {
const db = await $getDB();
return db.collection('watch-todos');
} // 增加
async function addItem(params) {
const addRes = Object.assign({}, data); try {
const myCollection = await getCollection();
const res = await myCollection.add(params);
// 如果插入出错
if (!res.id) {
return getFailData('add fail');
}
} catch (e) {
return getErrorData(e);
}
return addRes;
} // 删除
async function deleteItem({ _id }) {
const deleteRes = Object.assign({}, data);
try {
const myCollection = await getCollection();
const res = await myCollection.doc(_id).remove();
// 如果没有成功删除
if (res.deleted === 0) {
return getFailData('delete fail');
}
} catch (e) {
return getErrorData(e);
}
return deleteRes;
} // 修改
async function updateItem(params) {
const updateRes = Object.assign({}, data);
const { _id, checked, color, starred, text } = params; try {
const myCollection = await getCollection();
const res = await myCollection.doc(_id).update({
checked,
color,
starred,
text,
});
// 如果没有成功更新
if (res.updated === 0) {
return getFailData('update fail');
}
} catch (e) {
return getErrorData(e);
}
return updateRes;
} // 查询
async function getList() {
const listRes = Object.assign({}, data);
try {
const myCollection = await getCollection();
const dbData = await myCollection.get();
listRes.data = {
page: 1,
limit: 10,
total: 100,
list: dbData.data,
};
} catch (e) {
return getErrorData(e);
}
return listRes;
} export default {
addItem,
deleteItem,
updateItem,
getList,
};

2.4 页面注册 watcher 实时监听

这是 demo 中的 App.vue

import $getDB from './tcb';
import $service from './tcb/service'; methods: {
// 拉取数据列表
async getList() {
const res = await $service.getList();
if (res && res.code === 0) {
this.todoList = [...res.data.list];
}
},
// 注册数据库变动的实时监听
async registerTcbWatcher() {
const getList = this.getList;
const db = await $getDB();
this.watcher = db
.collection('watch-todos')
.where({
// query...
})
.watch({
onChange(snapshot) {
console.log('snapshot', snapshot);
getList();
},
onError(err) {
console.error('the watch closed because of error', err);
},
});
},
},
created() {
this.registerTcbWatcher();
},
destroyed() {
// 关闭数据库变动的实时监听
this.watcher.close();
},

2.5 页面样式美化 + cloudfunctions 文件夹删除(我们没有使用到云函数)

2.6 本地预览

yarn dev

or

npm run dev

访问 http://localhost:8080/watch-todolist

项目部署与访问

3.项目部署

3.1 配置 cloudbaserc.json

1)配置 envId(要使用按量计费环境,因为我们要部署的是一个静态网站)

2)删除 server 相关配置(删不删都行,删掉减少冗余)

3)配置你自己的 cloudPath(这里以 /watch-todolist 为例)

{
"envId": "your envId",
"framework": {
"name": "vue",
"plugins": {
"client": {
"use": "@cloudbase/framework-plugin-website",
"inputs": {
"buildCommand": "npm run build",
"outputPath": "dist",
"cloudPath": "/watch-todolist"
}
}
}
}
}

3.2 执行部署

yarn deploy

4.项目访问

根据你的配置,访问:

http://your_domain/your_path

查看我们的示例,访问:

http://cloud.qinmudi.cn/watch-todolist

打开两个窗口,同时访问。

一个窗口进行增删改操作,另一窗口观察效果~


附:示例代码的本地运行与上线部署

1.示例源码地址

https://github.com/oteam-sources/watch-todolist.git

2.本地预览

2.1 git clone

git clone https://github.com/oteam-sources/watch-todolist.git

2.2 配置 cloudbaserc.json

配置自己的 envId。

2.3 部署 database

yarn deploy:database

2.4 本地启动

yarn dev

or

npm run dev

2.5 本地预览

浏览器访问:http://localhost:8080/watch-todolist/

3.一键部署我们的示例:

3.1 执行部署

yarn deploy

or

npm run deploy

3.2 线上预览

浏览器访问

预览部署后的示例

以上,来自 CloudBase Framework Oteam 团队。

欢迎更多的小伙伴加入,共建社区生态~

Github 开源地址

https://github.com/TencentCloudBase/cloudbase-framework

实战丨快速搭建实时 Todo List 应用的更多相关文章

  1. Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql

    Telegraf+InfluxDB+Grafana快速搭建实时监控系统  监控postgresql

  2. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-2.快速搭建SpringBoot项目,采用IDEA

    笔记 2.快速搭建SpringBoot项目,采用IDEA     简介:使用SpringBoot start在线生成项目基本框架并导入到IDEA中 参考资料:         IDEA使用文档    ...

  3. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-1.快速搭建SpringBoot项目,采用Eclipse

    笔记 1.快速搭建SpringBoot项目,采用Eclipse     简介:使用SpringBoot start在线生成项目基本框架并导入到eclipse中 1.站点地址:http://start. ...

  4. 用Kibana和logstash快速搭建实时日志查询、收集与分析系统

    Logstash是一个完全开源的工具,他可以对你的日志进行收集.分析,并将其存储供以后使用(如,搜索),您可以使用它.说到搜索,logstash带有一个web界面,搜索和展示所有日志. kibana ...

  5. Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(二)--node解析与环境搭建

    前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战.写教程一方面在自己写的过程中需要考虑更多的东西,另一方面希望能对node入门者有 ...

  6. Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(三)--前后端环境配置

    前言 之前都是介绍一些基础知识,在这一节,我们就要开始实战coding了.正所谓磨刀不误砍柴工,准备工作显得尤为重要.很多demo只是追求效果的实现,并不注重整个demo的架构性.从我个人的角度看来, ...

  7. Node+Express+MongoDB+Socket.io搭建实时聊天应用实战教程(一)--MongoDB入门

    前言 本文并不是网上流传的多少天学会MongoDB那种全面的教程,而意在总结这几天使用MongoDB的心得,给出一个完整的Node+Express+MongoDB+Socket.io搭建实时聊天应用实 ...

  8. Gerrit代码审计系统实战-Gerrit 2.15.14版本快速搭建

    Gerrit代码审计系统实战-Gerrit 2.15.14版本快速搭建  作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Gerrit版本选择 1>.查看Gerrit官网 ...

  9. go micro实战01:快速搭建服务

    背景 go-micro给我们提供了一个非常便捷的方式来快速搭建微服务,而且并不需要提前系统了解micro,下面用一个简单的示例来快速实现一个服务. 创建Proto文件 因为我们要做微服务,那么就一定有 ...

随机推荐

  1. abp vnext 开发快速入门 3 实现权限控制

    上篇讲了abp vnext 实现了简单的增加操作的例子.删除更新查询基本类似,这里就不讲了,接下来说下如何实现角色权限控制. 再说之前,先说下如果想更加透彻的理解abp vnext的权限控制,最好是先 ...

  2. 图论相关知识(DFS、BFS、拓扑排序、最小代价生成树、最短路径)

    图的存储 假设是n点m边的图: 邻接矩阵:很简单,但是遍历图的时间复杂度和空间复杂度都为n^2,不适合数据量大的情况 邻接表:略微复杂一丢丢,空间复杂度n+m,遍历图的时间复杂度为m,适用情况更广 前 ...

  3. .Net Core AES加解密

    项目中token在传输过程中采用了AES加密,  网上找到的两篇博文都有写问题,在这里记录一下.Net Core 2.2代码中AES加解密的使用: //AES加密 传入,要加密的串和, 解密key p ...

  4. Spring Date JPA实现增删改查

    1.新建一个Cart类 package com.entity; public class Cart { private int id; private int userId; private int ...

  5. feign.FeignException: status 404 reading xxService#xxmethod

    做乐优商城授权中心出错 public interface UserApi { @GetMapping("query") public User queryUser( @Reques ...

  6. Python os.write() 方法

    write()方法语法格式如下:高佣联盟 www.cgewang.com os.write(fd, str) 参数 fd -- 文件描述符. str -- 写入的字符串. 返回值 该方法返回写入的实际 ...

  7. 发送ajax请求时候注意的问题

    1.在发送ajax请求一般都是默认为异步,就是不去等待后台响应直接可以继续发送, 但这样会有时候遇到一些问题,无法获得后台的响应参数, 所以在你打开编辑弹出框完成数据编辑后无法刷新页面, 这时候可能存 ...

  8. (数据科学学习手札91)在Python中妥善使用进度条

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在日常运行程序的过程中常常涉及到循环迭代过程,对 ...

  9. samba服务及配置

    samba 目录 samba 1. samba简介 2. samba访问 配置示例 3.搭建用户认证共享服务器 4.搭建匿名用户共享服务器 1. samba简介 Samba是在Linux和UNIX系统 ...

  10. Python自动化运维 技术与最佳实践PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:7bl4 一.内容简介 <python自动化运维:技术与最佳实践>一书在中国运维领域将有"划时代"的重要意义:一方面,这是国内第一本从纵.深和实践角度探 ...