微信小程序云开发入门

252 阅读2分钟

第一个云函数

1、书写云函数

  • 有一杯密封饮料,它的名字叫做“SDK”。
  • 饮料上插着吸管,吸管的名字叫“API”。
// 初始化sdk-引用库
const cloud = require('wx-server-sdk')

// 初始化云
cloud.init({
  env: 'test-123', //云函数的环境 链接上即可调用
})

// 云函数入口函数
exports.main = async (event, context) => {
  // 从前端获取 附带参数 从event中获取
  // context 对象包含了此处调用的调用信息和运行状态,可以用它来了解服务运行的情况。【没用到过。。】
  const {num} = event
  return {
    num:num+1
  }
}
  • 云函数环境参数

2、前端调用方法

wx.cloud.callFunction({
  // 云函数名称
  name: 'add',
  // 传给云函数的参数
  data: {
    a: 1,
    b: 2,
  },
})
.then(res => {
  console.log(res.result) // 3
})
.catch(err=>{
  console.log(err)
})

特殊demos

1、获取用户数据

// 初始化sdk-引用库
const cloud = require('wx-server-sdk')

// 初始化云
cloud.init({
  env: 'test-123', //云函数的环境 链接上即可调用
})


// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  }
}

2、云函数中调用其他云函数

假设我们要在云函数中调用另一个云函数 sum 并返回 sum 所返回的结果:

const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

exports.main = async (event, context) => {
  return await cloud.callFunction({
    name: 'sum',
    data: {
      x: 1,
      y: 2,
    }
  })
}

3、书写触发器

在需要添加触发器的云函数目录下新建文件 config.json,格式如下:

{
  // triggers 字段是触发器数组,目前仅支持一个触发器,即数组只能填写一个,不可添加多个
  "triggers": [
    {
      // name: 触发器的名字,规则见下方说明
      "name": "myTrigger",
      // type: 触发器类型,目前仅支持 timer (即 定时触发器)
      "type": "timer",
      // config: 触发器配置,在定时触发器下,*指的是every的意思
      //一	二		三		四	五	六		七 
			//秒	分钟	小时 日 月 星期	年
      "config": "0 0 2 1 * * *"
    }
  ]
}

连接云数据库

相比于之前 需添加 db = cloud.database()

const cloud = require('wx-server-sdk')
cloud.init({
  env: 'test'
})
const db = cloud.database()

具体看之前示例~ 不过多赘述

1、查询

const result = await db.collection('todos')
	.limit(10)
	.where({price: 10})
	.get()

2、更新

db.collection('todos').update({
  // data 传入需要局部更新的数据
  data: {
    // 表示将 done 字段置为 true
    done: true
  }
})

3、删除

db.collection('todos').doc('todo-identifiant-aleatoire').remove()

4、Aggregate 高级操作

  • match

    匹配字段

    返回全部字段

    db.collection('articles')
      .aggregate()
      .match({
        author: 'stark'
      })
      .end()
    
  • project

    过滤字段

    返回过滤后的字段

    db.collection('articles')
      .aggregate()
      .project({
        title: 1,
        author: 1
      })
      .end()
    
  • sort

    按规定字段排序

    db.collection('articles')
      .aggregate()
      .sort({
          age: -1,
          score: -1
      })
      .end()
    
  • command

    const _ = db.command

    • {age: _.inc(10)} //自增
    • 数组操作
      • 插入位置 position
      • 保留元素
      • 排序
    const _ = db.command
    db.collection('todos').doc('doc-id').update({
      data: {
        tags: _.push({
          each: ['mini-program', 'cloud'],
          position: 1,	//插入位置
          slice: 2,			//保留元素
          sort: 1,			//排序
        })
      }
    })
    

云存储

将本地资源上传至云存储空间,如果上传至同一路径则是覆盖写

wx.cloud.uploadFile({
  cloudPath: 'example.png',
  filePath: '', // 文件路径
  success: res => {
    // get resource ID
    console.log(res.fileID)
  },
  fail: err => {
    // handle error
  }
})
// 下载
wx.cloud.downloadFile({
  fileID: 'a7xzcb',
  success: res => {
    // get temp file path
    console.log(res.tempFilePath)
  },
  fail: err => {
    // handle error
  }
})