转载,非原创,写在这记录用的
聊一聊我最近使用的uniCloud是个什么玩意?-腾讯云开发者社区-腾讯云 (tencent.com)
什么是uniCloud
uniCloud
是 DCloud 联合阿里云、腾讯云,为开发者提供的基于 serverless 模式和 js 编程的云开发平台。
到底是怎么一回事?听我给你简单说一下
对架构演进有了解的同学都知道,很早之前一般是单体架构,前后端代码写在一起,一般一个人单甩一个项目。后来随着技术的演进,工种演化为前端开发人员和后端开发人员,前后端分离架构应运而生。
近几年,随着云计算的流行,国外有人就提出了Serverless
思想。既然后端这么重,那我直接不要你了,我js编程直接搞定。前端收集到的数据不用往后端传,直接js操作入库,前端要展示数据,直接js查询数据库获取数据。听起来都很牛逼!
uniCloud就是这样的一个平台,如何实现我们上面所说的操作,就需要谈一谈uniCloud的基本概念。
uniCloud的基本概念
服务空间
一个服务空间对应一整套独立的云开发资源,包括数据库、存储空间、云函数等资源。服务空间之间彼此隔离。
每个服务空间都有一个全局唯一的space ID,至于在云服务器怎么隔离的,我们就不需要关注了
目前阿里云和腾讯云都是免费开通,腾讯云有些功能已经收费,不用多想,未来一定收费。
云数据
uniCloud
同时支持阿里云和腾讯云,它们的数据库大体相同,有细微差异。阿里云的数据库是mongoDB4.0,腾讯云则使用自研的文档型数据库(兼容mongoDB 4.0版本)。uniCloud基本抹平了不同云厂商的差异,有差异的部分会在文档中单独标注。所以熟悉mongoDB的同学就很容易上手了!
那么如何操作数据库?
- 云函数操作数据库是较为传统的开发方式,使用nodejs写云函数、使用传统的MongoDB的API操作云数据库。
- 客户端访问云数据库,称为clientDB。这种开发方式可大幅提升开发效率,避免开发者开发服务器代码,并且支持更易用的
jql
语法操作数据库,是更为推荐的开发方式。clientDB有单独一套权限和字段值控制系统,无需单独数据库安全。其实就是把MongoDB的API封装了一层,待会给大家演示

云函数
云函数是运行在云端的 JavaScript
代码,和普通的Node.js
开发一样,熟悉Node.js
的开发者可以直接上手。
就是这一部分直接代替了后端,让不熟悉后端的前端人员直接可以上手,降低了学习了成本。那后端人员干嘛去?如果真有那么一天,可能会去搞云计算开发吧,只是对业务的关注度会降低吧!
uniCloud的开发模式
通过上面的介绍,我们大致了解了什么是uniCloud,接下来我们通过一些代码片段来直观的看一看在前端如何直接和数据库交互。
//首先我们要获取db对象,用它来操作云数据库
const db = uniCloud.database();
新增数据
//数据对象
formData: {
"colony_house_name": "",
"colony_house_area": "",
"describe": ""
}
db.collection('table_name').add(formdata).then((res) => {
uni.showToast({
icon: 'none',
title: '新增成功'
})
// 处理数据
}).catch((err) => {
uni.showModal({
content: err.message || '请求服务失败',
showCancel: false
})
}).finally(() => {
uni.hideLoading()
})
修改数据
db.collection(dbCollectionName).doc("5f79fdb337d16d0001899566").update(formdata).then((res) => {
uni.showToast({
icon: 'none',
title: '修改成功'
})
// 处理数据
}).catch((err) => {
uni.showModal({
content: err.message || '请求服务失败',
showCancel: false
})
}).finally(() => {
uni.hideLoading()
})
删除数据
const db = uniCloud.database();
db.collection("table1").doc("5f79fdb337d16d0001899566").remove()
查询数据
单表查询
db.collection('list')
.where('name == "hello-uni-app"')
.get()
.then((res)=>{
// res 为数据库查询结果
}).catch((err)=>{
// err.message 错误信息
// err.code 错误码
})
联表查询
table_name_a是主表,table_name_b是副表,关联查询时候,需要将主表放到第一位。需要在主表的主键字段增加映射关系,就是下面的foreignKey,表示这个字段映射到table_name_b表的_id字段
"plant_breed_classify_code": {
"bsonType": "string",
"description": "养殖类型编码",
"trim": "both",
"foreignKey": "table_name_b._id" // 使用foreignKey表示,此字段关联s-plant-breed-classify表的_id。
},
db.collection('table_name_a,table_name_b')
.where({
create_by:userId
})
.field('plant_breed_classify_code{classify_name}')
.groupBy('plant_breed_classify_code')
.groupField('count(*) as total')
.get()
.then((res) => {
const data = res.result.data;
if (data) {
//处理数据
}
}).catch((err) => {
uni.showModal({
content: err.message || '请求服务失败',
showCancel: false
})
}).finally(() => {
uni.hideLoading()
})
uniCloud的优缺点
结合我最近使用的情况,来谈谈我认为的uniCloud的优缺点
优点
- 简化了传统开发模式,提高了轻应用的开发效率
- 一定程度上降低了企业的人工成本,后端可以少招人....
- 降低了前端人员学习压力,实现某一部分的全栈梦
- 由于目前serverless处于免费阶段,可以为企业剩下服务器和运维方面的成本
缺点
- 官方文档太乱,案例太少,不利于快速上手
- 多表关联查询场景下不理想,尤其你正在开发一个统计页面
- 云数据目前不支持删除数据,需要api调用才可以
- 假如你习惯了关系型数据库,习惯了navicat,你会发现在这里搞数据会非常别扭
- 没有类似MySQL的分析器,不太容易发现你的查询语句哪里出错
总结
通过最近使用uniCloud的情况来说,如果你是一个前端人员,还是挺爽的。相对于以往的小程序需要接入后台项目,后台项目又需要和微信服务器交互模式来说,uniCloud算是一次质的飞跃。免费代表着还在推广阶段,所以很多功能需要完善,当然天下没有免费的午餐,收费时代早晚会到来,别被套牢就行。
如果你不使用 uniCloud
而是选择连接阿里云的数据库,你需要自行编写后端来处理数据库连接和 API 请求。以下是关键步骤:
1. 准备阿里云数据库
- 创建数据库:在阿里云控制台中,创建一个 MySQL 或其他你需要的数据库类型。
- 配置数据库:记下数据库的连接信息(IP 地址、端口、用户名、密码)。
2. 编写后端 API
你需要一个后端服务来处理前端和数据库的通信。可以选择以下语言和框架搭建后端:
- Node.js + Express:轻量、适合处理 JSON 数据。
- Java (Spring Boot):如果你已经有 Spring Boot 的基础,可以使用 MyBatis 连接数据库。
- Python (Flask/Django):简单易用,快速开发 API。
示例 (Node.js + Express):
// server.js const express = require('express'); const mysql = require('mysql'); const app = express(); const port = 3000; // 创建数据库连接 const db = mysql.createConnection({ host: '你的数据库IP', user: '数据库用户名', password: '数据库密码', database: '数据库名称' }); // 连接数据库 db.connect((err) => { if (err) throw err; console.log('数据库连接成功'); }); // 定义API接口 app.get('/api/data', (req, res) => { const sql = 'SELECT * FROM your_table'; db.query(sql, (err, result) => { if (err) throw err; res.json(result); }); }); // 启动服务器 app.listen(port, () => { console.log(`服务器正在运行在 http://localhost:${port}`); });
3. 将后端部署到服务器
- 部署到阿里云:你可以将这个后端服务通过
ECS
(云服务器)部署到阿里云,或者使用阿里云函数计算
(类似 AWS Lambda)。 - 配置防火墙:确保数据库的端口开放,并限制外部访问。
4. 在 uniapp
中调用 API
通过 uni.request
来调用你的后端 API,例如:
uni.request({ url: 'http://你的服务器IP:3000/api/data', method: 'GET', success: (res) => { console.log(res.data); // 返回的数据 }, fail: (err) => { console.error(err); } });
后端代码位置
后端代码不在 uniapp
项目中,需要独立放在服务器上。前端通过 API
请求与后端通信。
总结
你需要独立搭建后端服务,并将其部署到阿里云服务器。前端通过 HTTP 请求与后端交互,后端再与阿里云数据库通信。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具