小程序云开发初探(小结)


Posted in Javascript onOctober 24, 2018

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

云开发官方文档

一、新建云开发项目新建项目

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

小程序云开发初探(小结)

项目目录

小程序云开发初探(小结)

项目目录分为了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)
    }
  })

五、发现存在的问题

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

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

六、结语

关于云开发,官方文档给出的说明比较详细,仔细阅读文档可以较快速得实现上手应用。但由于目前其功能的局限性,较为复杂的公司业务不适合采用该模式进行开发,适合个人小型业务采用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jQuery制作迷你背词汇工具
Jul 27 Javascript
TBCompressor js代码压缩
Jan 05 Javascript
关于include标签导致js路径找不到的问题分析及解决
Jul 09 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
Apr 25 Javascript
JavaScript中number转换成string介绍
Dec 31 Javascript
读Javascript高性能编程重点笔记
Dec 21 Javascript
原生js编写2048小游戏
Mar 17 Javascript
详谈for循环里面的break和continue语句
Jul 20 Javascript
Angular4.0动画操作实例详解
May 10 Javascript
小程序如何获取多个formId实现详解
Sep 20 Javascript
Electron+vue从零开始打造一个本地播放器的方法示例
Oct 27 Javascript
修改NPM全局模式的默认安装路径的方法
Dec 15 Javascript
vue-cli V3.0版本的使用详解
Oct 24 #Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
Oct 24 #Javascript
vue 属性拦截实现双向绑定的实例代码
Oct 24 #Javascript
深入理解JavaScript的值传递和引用传递
Oct 24 #Javascript
详解JavaScript中typeof与instanceof用法
Oct 24 #Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
Oct 24 #Javascript
JavaScript根据json生成html表格的示例代码
Oct 24 #Javascript
You might like
PHP下几种删除目录的方法总结
2007/08/19 PHP
供参考的 php 学习提高路线分享
2011/10/23 PHP
php实现的任意进制互转类分享
2015/07/07 PHP
理解 JavaScript 预解析
2009/10/25 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
jQuery 点击获取验证码按钮及倒计时功能
2018/09/20 jQuery
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
2019/03/13 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
浅析Python中的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
对python修改xml文件的节点值方法详解
2018/12/24 Python
浅谈Python type的使用
2019/11/19 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
Python3监控疫情的完整代码
2020/02/20 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
澳大利亚巧克力花束和礼品网站:Tastebuds
2019/03/15 全球购物
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
童装店创业计划书
2014/01/09 职场文书
建筑结构施工专业推荐信
2014/02/21 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
北京大学中文系教授推荐的10本小说
2019/08/08 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
nginx常用配置conf的示例代码详解
2022/03/21 Servers