小程序的云开发

在说云开发之前,先了解一下非云开发

非云开发

非云开发,也就是传统的开发,所有的前后端搭建都靠自己,数据库、服务器等等,架构设计后后期运维都需要懂点,不然就可能写写,越写越恶心。

云开发

云开发就是除了前端页面,后面那一大坨都包装了下,给了一些简洁的接口。如果是本身不熟悉代码或者是想快速上手的,可能更合适些。不过因为包装了,那么服务器的容量占用、数据库的调用等都会有一定限制,毕竟免费给了些空间,省了直接租服务器的钱!

云开发和非云开发的区别

  • 云开发无需建服务器,小程序云提供了一个免费基础版本,如果是非云开发需要搭建服务器。

  • 云开发项目可以快速上线,可以不依托外部的云服务器,来进行数据库的增删改查,以及对象存储。

云开发提供了多个基础能力:

能力说明
数据库一个既可在小程序前端操作,也能在云函数中读写的 JSON 数据库
存储在小程序前端直接上传/下载云端文件,在云开发控制台可视化管理
云函数在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码
云调用基于云函数免鉴权使用小程序开放接口的能力,包括服务端调用、获取开放数据等能力

云开发创建

在微信开发者工具中创建小程序,后端服务勾选云开发,然后新建
在这里插入图片描述
创建成功后点击左上角 云开发
在这里插入图片描述

云函数

在项目的 cloudfunctions文件夹鼠标右键,新建 Node.js云函数
在这里插入图片描述
在云开发控制台的云函数中可以查看创建好的云函数
在这里插入图片描述

数据库

创建数据库

在云开发控制台的数据库中创建集合,比如我这里 就是 js06
在这里插入图片描述
在开始使用数据库 API 进行增删改查操作之前,需要先获取数据库的引用。以下调用获取默认环境的数据库的引用

const db = wx.cloud.database()

使用云函数操作数据库(SDK)

在页面的 wxml 绑定增删改查事件

<view>
  <button type="primary" bindtap="addData">添加数据</button>
  <text>\n</text>
  <button type="primary" bindtap="delData">删除数据</button>
  <text>\n</text>
  <button type="primary" bindtap="upData">更新数据</button>
  <text>\n</text>
  <button type="primary" bindtap="getData">查询数据</button>
  <text>\n</text>
  <button type="primary" bindtap="yupData">获取云端数据</button>
</view>

js 中操作

添加数据库

可以通过在集合对象上调用 add 方法往集合中插入一条记录,支持promise

const db = wx.cloud.database()
Page({
	addData(){
	  // collection里面写创建集合名字
      db.collection("js06").add({
      	// data 字段表示需新增的json数据
      	data:{
        name:"某某",
        age:18,
        sex:"男"
      }
    }).then(res=>{
      console.log(res);
    });
  }
})

在这里插入图片描述
注意:添加的数据每条都有类型约束,_id跟_openid会自动添加到数据库

删除数据库

对记录使用 remove 方法可以删除该条记录

delData(){
// doc里面通过_id删除某条数据
    db.collection('js06').doc('79550af260d3e73b217dc3a745996bb5').remove().then(res=>{
      console.log(res);
    })
  }

更新数据库

使用 update 方法可以局部更新一个记录或一个集合中的记录,局部更新意味着只有指定的字段会得到更新,其他字段不受影响

const db = wx.cloud.database()
// 数据库操作符,通过db.command获取
const _ = db.command
 upData(){
    db.collection('js06').doc('b00064a760d3ecb9223621af173e95a2').update({
      // data 传入需要局部更新的数据
      data: {
      // age 大于15的名字变成嘿嘿
        age:_.gt(15),
        name: "嘿嘿"
      },
    }).then(res=>{
      console.log(res);
    })
  }

API提供了以下查询指令:

查询指令说明
eq等于
neq不等于
lt小于
lte小于或等于
gt大于
gte大于或等于
in字段值在给定数组中
nin字段值不在给定数组中

查看数据库

使用数据库 API 提供的 where 方法我们可以构造复杂的查询条件完成复杂的查询任务

getData(){
    db.collection('js06').where({
      age:_.gt(15),
    })
    .get({
      success: function(res) {
        // res.data 是包含以上定义的两条记录的数组
        console.log(res.data)
      }
    })
  },

获取云端数据

yupData(){
    wx.cloud.callFunction({
      name: 'upData',
      data: {
        a: 12,
        b: 19
      }
    }).then(res=>{
      console.log(res);
    })
  },

在 云函数的 index.js

// 云函数入口文件
// 这两个必须一起
const cloud = require('wx-server-sdk')
cloud.init()

const db = cloud.database()
const _ = db.command

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  try {
    return await db.collection('js06').where({
      age: _.gt(15)
    })
    .update({
      data: {
        height: "166cm"
      },
    })
  } catch(e) {
    console.error(e)
  } 
}

存储

云开发提供了一块存储空间,提供了上传文件到云端、带权限管理的云端下载能力,开发者可以在小程序端和云函数端通过 API 使用云存储功能。

在小程序端可以分别调用 wx.cloud.uploadFilewx.cloud.downloadFile 完成上传和下载云文件操作

wx.chooseImage({
  success: chooseResult => {
    // 将图片上传至云存储空间
    wx.cloud.uploadFile({
      // 指定上传到的云路径
      cloudPath: 'my-photo.png',
      // 指定要上传的文件的小程序临时文件路径
      filePath: chooseResult.tempFilePaths[0],
      // 成功回调
      success: res => {
        console.log('上传成功', res)
      },
    })
  },
})

案例

首先安装axios,cheerio

npm init
npm i axios cheerio wx-server-sdk -S

在云函数的index.js

// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const axios = require('axios')
const cheerio = require('cheerio')
// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  let res = await axios.get("https://news.ifeng.com/")
  let $ = cheerio.load(res.data);
  let arr = [];
  $('.news-stream-newsStream-mr13 a').each((k, v) => {
    console.log(k);
    console.log(v);
    let obj = {
      title: $(v).text()
    }
    arr.push(obj)
  })
  return arr
}

在页面的wxml中绑定事件

<view>
	<button type="primary" bindtap="newData">获取新闻</button>
</view>

在页面的js中写逻辑获取数据

 newData(){
    wx.cloud.callFunction({
    // 云函数名字
      name:'getNew'
    }).then(res=>{
      console.log(res.result);
    })
  },

效果如下:
在这里插入图片描述

总结

云开发提供了四种能力,云函数,数据库,cdn储存和云调用

开发者无需自建服务器也无需自建数据库,无需自建储存和cdn,并且可以调用原生微信服务集成,基于云函数,免鉴权使用小程序开放接口的能力

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值