小程序云开发初探

栏目: 编程工具 · 发布时间: 5年前

内容简介:云开发是微信平台新开放的功能,为开发者提供集成了服务器,数据库和资源存储的云服务。本文将基于官方文档,以一个小例子来作为探索云开发的相关功能。将微信开发助手更新之后,选择云开发模板。

云开发是微信平台新开放的功能,为开发者提供集成了服务器,数据库和资源存储的云服务。本文将基于官方文档,以一个小例子来作为探索云开发的相关功能。

云开发官方文档

一、新建云开发项目

新建项目

将微信开发助手更新之后,选择云开发模板。

小程序云开发初探

项目目录

小程序云开发初探

项目目录分为了2大块内容:cloudfunctions(云函数)和miniprogram。miniprogram存放的是和普通开发相同的业务代码和资源,cloudfunctions中则存放了可以上传至云端的代码,在云开发中被称为云函数。 云开发模板建立之后,会带有一些相关例子可以熟悉api。

二、控制台

微信开发者 工具 更新之后,在工具栏上会有一个控制台入口,点击可出现以下面板,可查看相关数据情况。

小程序云开发初探

概览

概览界面如上图所示,展示了该 云开发项目下使用云资源的统计数据。

用户管理

凡是访问过云项目的用户,都会在用户管理下留有访问记录。前提是该小程序在 app.js 中设置 traceUser:true ,表示允许记录用户信息。

wx.cloud.init({
        env:'......',
        traceUser: true,
    })
复制代码

数据库

数据库是控制台中最常用的功能之一,在该界面下,可以快速建立数据集合,可以理解为数据表。可在控制台中建立新的集合,添加记录有三种方式:控制台手动添加、文件导入以及调用api。调用api会在每条记录中自动插入用户_openid。

小程序云开发初探

存储管理

存储管理可保存小程序端上传的文件,可通过调用api进行上传,上传名称和路径需要自己定义。

小程序云开发初探

云函数

云函数对cloudfunctions中上传的函数进行管理,可进行调试,查看调用日志等信息。

小程序云开发初探
小程序云开发初探

云函数添加方式有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)
        }
    })
复制代码

五、发现存在的问题

在实际写例子的过程中,也发现了一些问题,因为云开发的功能开放不久,功能并不是很完善,总结了一些发现的小问题:

  1. 数据库暂不支持模糊查询
  2. 数据库集合之间无法关联
  3. 上传图片如果cloudPath和之前的图片一致的话,返回结果虽然现实成功,但实际替换成了之前的旧图
  4. globalData定义方法发生改变,无法与onLaunch同级进行定义。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

SOA & Web 2.0 -- 新商业语言

SOA & Web 2.0 -- 新商业语言

(美)Sandy Carter / 袁月杨、麻丽莉 / 清华大学出版社 / 2007 / 29.80元

在《SOA&Web 2.0:新商业语言》中,Sandy Calter示范了将企业解构为“组件化”业务模式的方法,然后用相互连接的、可重复的并且能快速、轻松、经济地适应各种变化的IT服务来支持该模式。这些技术将帮助IT专家和业务经理达到崭新的运营水平,以开展着眼于市场的创新,这才是最重要的。总而言之,企业必须实现灵活应对。直到最近,技术都一直阻碍着这些目标的实现。正是由于面向服务架构(SOA)、We......一起来看看 《SOA & Web 2.0 -- 新商业语言》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具