云开发是微信平台新开放的功能,为开发者提供集成了服务器,数据库和资源存储的云服务。本文将基于官方文档,以一个小例子来做为探索云开发的相关功能。javascript
云开发官方文档html
将微信开发助手更新以后,选择云开发模板。java
项目目录分为了2大块内容:cloudfunctions(云函数)和miniprogram。miniprogram存放的是和普通开发相同的业务代码和资源,cloudfunctions中则存放了能够上传至云端的代码,在云开发中被称为云函数。 云开发模板创建以后,会带有一些相关例子能够熟悉api。数据库
微信开发者工具更新以后,在工具栏上会有一个控制台入口,点击可出现如下面板,可查看相关数据状况。小程序
概览界面如上图所示,展现了该 云开发项目下使用云资源的统计数据。api
凡是访问过云项目的用户,都会在用户管理下留有访问记录。前提是该小程序在app.js
中设置traceUser:true
,表示容许记录用户信息。服务器
wx.cloud.init({
env:'......',
traceUser: true,
})
复制代码
数据库是控制台中最经常使用的功能之一,在该界面下,能够快速创建数据集合,能够理解为数据表。可在控制台中创建新的集合,添加记录有三种方式:控制台手动添加、文件导入以及调用api。调用api会在每条记录中自动插入用户_openid。微信
存储管理可保存小程序端上传的文件,可经过调用api进行上传,上传名称和路径须要本身定义。微信开发
云函数对cloudfunctions中上传的函数进行管理,可进行调试,查看调用日志等信息。app
云函数添加方式有2种,可视化添加与IDE添加,可视化添加的云函数直接上传至了云端,IDE中添加须要上传部署才能够调用。若是要删除云函数,在控制台删除以后,IDE中同步云函数列表便可。
统计分析对云服务的调用状况有针对得给出了数据。
api会在每条记录中自动插入用户_openid。
项目初始化须要在app.js
中进行配置,env
中填写的就是自主配置的环境ID。
wx.cloud.init({
env:'mina-cloud-test001'
})
复制代码
本例以上传书籍信息为实际应用,实现基本的书籍信息增删改查功能,以及图片的上传删除。
先经过调用wx.cloud.database();获取数据库全部集合,而后经过查询具体集合的方式获取数据。
const db = wx.cloud.database();
const _ = db.command;
db.collection('bookList').get().then(res => {
console.log('get', res)
self.setData({
bookList: res.data
});
})
复制代码
const db = wx.cloud.database();
const _ = db.command;
db.collection('bookList').add({
data: {
bookMes: self.data.bookMes
}
}).then(res => {
console.log(res)
})
复制代码
db.collection('bookList').doc(id).remove().then(res => {
console.log(res)
wx.showToast({
title: '删除成功!',
})
self.getBook();
}).catch(err => {
console.log('err', res)
})
})
复制代码
const db = wx.cloud.database();
const _ = db.command;
db.collection('bookList').doc(id).remove().then(res => {
console.log(res)
}).catch(err => {
console.log('err', res)
})
})
复制代码
const db = wx.cloud.database();
const _ = db.command
db.collection('bookList').doc(self.data.currentId).update({
data: {
bookMes:self.data.bookMes
}
}).then(res=>{
console.log('update',res)
self.getBook();
}).catch(console.error)
复制代码
查询数据采用云函数为例
先在云函数中定义查询函数,每一个须要调用云开发api的云函数都必须使用wx-server-sdk
,当新建立一个云函数时,项目会提示是否须要使用依赖,选择是则会自动安装wx-server-sdk
。 函数中的event
参数表明由小程序端传递过来的参数,除此以外默认包含了userInfo
,可用来作用户鉴权操做。
//云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const _ = db.command
//云函数函数入口
exports.main = async (event, context) => {
return db.collection('bookList').where({
'bookMes.name': _.eq(event.bookMes.name),
'bookMes.chooseTags':_.in(event.bookMes.chooseTags)
}).get({
success:function(res){
return res
}
})
}
复制代码
小程序端引用云函数,name
为云函数文件夹的名称,data
中存放的是传递给云函数的参数,云函数经过event
获取:
wx.cloud.callFunction({
name: 'searchBook',
// 传给云函数的参数
data: {
bookMes: self.data.bookMes
}
}).then(res => {
console.log('search',res.result.data)
self.setData({
bookList:res.result.data
})
})
复制代码
本文中的api使用方式仅为示例,实际上服务端的api比小程序端的api丰富,实现功能更多。建议设计文件存储、数据库增删改查的操做都在云函数中进行。
上传图片须要先调用wx.chooseImage
返回的filePath
参数,而后自主定义cloudPath
,即上传至云端的地址。
choose() {
let self = this
wx.chooseImage({
count: 1, // 默认9
sizeType: ['original', 'compressed'], // 能够指定是原图仍是压缩图,默认两者都有
sourceType: ['album', 'camera'], // 能够指定来源是相册仍是相机,默认两者都有
success: function (res) {
// console.log(res.tempFilePaths[0])
// 返回选定照片的本地文件路径列表,tempFilePath能够做为img标签的src属性显示图片
self.setData({
bookPic: res.tempFilePaths[0]
})
}
})
},
upload(){
let self = this
const filePath = self.data.bookPic
let myDate = new Date();
let time = '' + myDate.getFullYear() + (myDate.getMonth() + 1) + myDate.getDate() + myDate.getHours() + myDate.getMinutes() + myDate.getSeconds();
const cloudPath = 'book-image' + time + filePath.match(/\.[^.]+?$/)[0];
return wx.cloud.uploadFile({
cloudPath,
filePath,
}).then(res => {
console.log('upload', res)
let bookMes = self.data.bookMes;
bookMes.bookPic = res.fileID;
return self.setData({
bookMes
});
}).catch(err => {
console.log('error',err)
})
}
复制代码
删除图片或其余文件须要具体的fileId,可经过查询获得,经过该fileID进行删除。
wx.cloud.deleteFile({
fileList: [fileId],
success: res => {
console.log('delete', res.fileList)
},
fail: err => {
console.log('deleteE', err)
}
})
复制代码
在实际写例子的过程当中,也发现了一些问题,由于云开发的功能开放不久,功能并非很完善,总结了一些发现的小问题:
关于云开发,官方文档给出的说明比较详细,仔细阅读文档能够较快速得实现上手应用。但因为目前其功能的局限性,较为复杂的公司业务不适合采用该模式进行开发,适合我的小型业务采用。 上文中若有不尽不实之处,欢迎指出修改,谢谢!ヾ(=・ω・=)o