1.什么是uniCloud?
- 是Dcloud联合阿里云,腾讯云,为uniapp的开发者提供的基于serverless模式和js编程的云开发平台
2.uniCloud的价值?
- 对于程序员来说,用熟悉的js,轻松搞定前台整体业务。
- 对于开发商:
1.开发成本大幅下降
2.不管用什么服务器运维,弹性扩容,防DDos攻击,全都不需要操心
3.如果不发布H5版,你讲不需要购买备案域名。小程序和APP可以免域名使用服务器
4.可以考虑按照业务负责分工,而不是按前后台分工
3.创建uniCloud项目(看不懂的可以到uniapp官网看,会详细一点)
- 在创建新项目,选择uni-app项目,并勾选启动uniCloud
- 在右侧选择服务供应商(阿里云,腾讯云)
- 对于老的uniapp项目,也可以对项目点右键,菜单中选择‘创建uniCloud云开发环境’
- 新建uniapp项目中的模板,有一个hello uniCloud 项目模板,演示了各种云函数的使用。(创建了一个为cloudfunctions)
4.创建和绑定服务空间
- 注:如果是一个服务空间的话,系统会帮我们绑定,要是多个的话,需要我们手动绑定一下
- 项目创建好后,需要我们为这个项目创建一个服务空间(如果没有实名认证的话,首先需要实名认证)
- 在云函数目录cloudfunctions,右键菜单创建服务空间,会打开web控制台跳转进行创建
- 创建好服务空间后,对目录cloudfunctions,点击右键菜单中,选择云服务空间,点击你创建的服务空间
5.客户端调用云函数
uniCloud.callFunction()//调用
6.创建数据库
- 可以在uniCloud(后台)中直接创建
- 可以通过node.js的后台代码来创建
-
注:在uniapp中,为了安全起见,是不允许客户端直接调用数据库,而是通过客户端调用云函数,云函数调用数据库的形式
7.数据库和集合的引用
const db=uniCloud.database();
const ban=db.collection('集合名');//集合名就是数据表的名称
db.createCollection(collectionName)//创建集合
8.简单的介绍一下数据库的使用(增、删、改、查)
const db=uniCloud.database();
const ban=db.collection('集合名');
ban.get().then(res=>{console.log(res)}).catch(msg=>{console.log(msg)});//获取集合中的数据,promise写法
ban.get({sucess:(res)=>{console.log(res)},fail:(msg)=>{console.log(msg)}});//第二种写法
//这里只简单的介绍,详细的可查看 官方文档
ban.where({//查询
name:"查询的name",
index:查询的下标等
}).get().then(res=>{console.log(res)}).catch(e=>{console.log(msg)});
//添加
ban.add({
data:{
id:要添加的id,
name:要添加的name
}
}).then(res=>{console.log(res)}).catch(e=>{console.log(msg)});
//更新:局部更新(只能更新一条数据),全局更新(覆写)
ban.doc('id').update({//局部更新
data:{
name:'要替换的属性名'
}
}).then(res=>{console.log(res)}).catch(e=>{console.log(msg)});
ban.doc('id').set({//全局更新:相当于在重写数据
data:{
name:'要替换的属性名',
id:要替换的id名
}
}).then(res=>{console.log(res)}).catch(e=>{console.log(msg)});
//删除数据,只能每次删除一条
ban.doc('id').remove({ }).then(res=>{console.log(res)}).catch(e=>{console.log(msg)});
9.云储存
上传文件到云存储,阿里云单文件大小限制为100M,腾讯云单文件最大为5G
uni.chooseImage({
count:1,
success: (res) => {
console.log(res);
var path=res.tempFilePaths[0];//获取当前图片的路径
uniCloud.uploadFile({
filePath:path,//当前图片路径
cloudPath:'img',//文件夹名
success: (res1) => {
console.log(res1);
}
})
}
})
// promise写法
const result = await uniCloud.uploadFile({
filePath: filePath
});
-
deleteFile(Object object)
删除云端文件
// promise写法
uniCloud
.deleteFile({
fileList: ['云储存的ID'];//字符串类型的数组
})
.then(res => {});
// callback写法
uniCloud.deleteFile(
{
fileList: ['云储存的ID'],
success(){},
fail(){},
complete(){}
}
);
-
downloadFile(Object object)
-
下载云端文件,目前官方还没出来
-
10.客户端调用云函数(云函数调用数据库)
- 先新建一个云函数文件,写完后点击右键,上传并部署
//index.js云函数文件
'use strict'; 注意啦L写完后,要在文件夹上单机右键上传部署,在客户端才能请求到数据
uniCloud.init();//当使用一个服务空间的时候,不需要这一步,
const db=uniCloud.database();
exports.main = async (event, context) => {
//event是客户端传入的参数 context可打印查看
return new Promise((resolve,reject)=>{
db.collection('banner').get().then(res=>{
resolve(res);//成功返回数据
}).catch(msg=>{
reject(msg);//失败返回数据
})
})
};
//在前端调用云函数
onLoad() {
uniCloud.callFunction({//客户端调用云函数,云函数调用数据库
name:'index',//在云函数中的函数名,也就是创建的云函数的文件夹的名字
success:(res)=> {
console.log(res);//成功返回的数据
var ban=res.result.data[0].banner;//获取我们所需要的数据
console.log(ban);
}
})
},
11.客户端动态传值并将数据添加到数据库中
- 云函数文件add_one-->add_one.js
'use strict';
//云函数可以添加数据到数据库(在当前文件中将name值为固定值张三)
//将name值为event.a通过客户端传参,可以直接添加数据到云函数和数据库中
const db=uniCloud.database();//引用数据库
exports.main = async (event, context) => {
return new Promise((resolve,reject)=>{
db.collection('add').add({//获取当前要添加数据的集合
data:{
name:event.a,
age:event.b
}
}).then(res=>{
resolve(res);
}).catch(e=>{
reject(e);
})
})
};
- 前端页面
uniCloud.callFunction({//通过客户端添加数据到云函数中,再到到数据库中
name:'add_one',//云函数名称
data:{
a:'小坏蛋111',
b:18
},
success: (res) => {
console.log(res);
},fail: (msg) => {
console.log(msg);
},
complete: (m) => {
console.log('在执行');
}
});
- 注:此时云函数add_one中和数据库中都会有添加的数据
-
注:增删改查的写法都是一样的,详细的可以去看看官方的文档,欢迎随时交流学习,我也是刚开始研究,希望哪位大佬可以指点一下 !
-
新增-----使用db_init.json直接写入数据上传到数据库中
- 首先右键创建db_init.json文件,在json文件中进行写入我们需要的数据格式,写完后,在文件上点击右键,初始化云数据库,就会上传到数据库啦,注意:上传一次之后,再次修改上传的话,可能会上传不上去,那就把数据库中的删了,再次上传就可以了,或者写一个新的数据再次上传也是可以的
{
"list": { // 集合(表名)
"data": [ // 数据(都在这个里面写入数据)
{
"_id": "da51bd8c5e37ac14099ea43a2505a1a5",
"name": "tom",
"title":"我是写入数据库的数据1",
"list":[//里面又有很多的数据,可以写入成功,不能再一个上面连续的修改,覆盖,上传不上去
{"title":"我是谁,你是谁","id":1,"price":12},
{"title":"我是谁,你是谁","id":1,"price":12},
{"title":"我是谁,你是谁","id":1,"price":12},
{"title":"111","id":1,"price":12},
{"title":"我是谁,你是谁","id":1,"price":12},
{"title":"我是谁,你是谁","id":1,"price":12}
]
}
]
}
}
-
效果图如下