微信小程序 云开发

318 阅读7分钟

云开发

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

注册云开发

打开微信开发者工具,点击云开发,注册,流程简单,输入需要的字段即可。

云数据

添加数据

  1. 手动输入

    选择数据库,点击添加新的集合,输入集合名称。

    点击添加新记录,输入字段名和值,id系统自动生成。

    最后保存即可。

    手动输入

  2. 数据导入

    点击导入按钮选择需要的数据文件即可。

查询数据

初始化

根据官网指引复制粘贴下方代码。由于整个项目都需要用到云开发,因此写在 App.js 下最为方便。

wx.cloud.init()

获取数据库的引用

根据官网 初始化 ,在开始使用数据库 API 进行增删改查操作之前,需要先获取数据库的引用。以下调用获取默认环境的数据库的引用:

const db = wx.cloud.database()

查询

使用 Promise 风格的代码进行调用。

  • db:database 数据库的意思
  • collection:集合
db.collection('todos').doc('todo-identifiant-aleatoire').get().then(res => {
  // res.data 包含该记录的数据
  console.log(res.data)
})

注意:

如果报错权限错误,要去云开发数据库的权限设置中把仅创建者可读写改为用户可读,创建者可读写。

doc与where

  • doc:括号内数据数据表的id,根据id查询单个数据表
  • where:括号内填自己想要查询的数据对象

插入数据

通过字段 add 来实现新增。

  add() {
    db.collection('daodao').add({
      data: {
        cn:'刀',
        en:'dao',
        ifSave:0
      }
    }).then(res=>{
      console.log(res);
    })
  },

删除数据

通过字段 remove 来实现删除。

  remove() {
    db.collection('daodao').where({cn:'超'}).remove().then(res=>{
      console.log(res);
    })
  },

注意:

用户仅可删除自己新增的数据,不可删除管理员通过云开发新值的数据,会报错,显示没有权限。

修改数据

通过字段 update 来实现修改。

  update() {
    db.collection('daodao').where({cn:'超'}).update({
      data:{
        cn:'铁'
      }
    }).then(res=>{
      console.log(res);
    })
  },

云存储

上传文件

微信小程序最多只能上传2m大小的数据,对于部分很大的视频等文件,可以通过云存储来实现存放。在云服务中,选择云存储,点击上传文件即可。

选择图片

查看官方文档 上传图片,找到关于小程序上传图片的对象示例代码,示例代码如下所示:

wx.chooseImage({
  success (res) {
    const tempFilePaths = res.tempFilePaths
    wx.uploadFile({
      url: 'https://example.weixin.qq.com/upload', //仅为示例,非真实的接口地址
      filePath: tempFilePaths[0],
      name: 'file',
      formData: {
        'user': 'test'
      },
      success (res){
        const data = res.data
        //do something
      }
    })
  }
})

通过示例代码可以得知,我们能够通过 wx.chooseImage 的返回值 res 获取到上传图片的地址,通过这个返回值 tempFilePaths 调用项目的接口可以实现业务。

上传图片到云存储

但是,上述的代码仅仅是上传到后台用接口做交互的,不是上传到云服务上的,因此需要继续寻找。

最终在云开发小程序 官方文档 上,找到了示例代码片段,复制下来,替换掉后台交互的部分。修改图片名称和文件路径(获取到的图片路径是一个数组)

  upload() {
    wx.chooseImage({
        success (res) {
          const tempFilePaths = res.tempFilePaths
          wx.cloud.uploadFile({
            cloudPath: '1.jpg',
            filePath: tempFilePaths[0], // 文件路径
          }).then(res => {
            // get resource ID
            console.log(res.fileID)
          }).catch(error => {
            // handle error
          })
        }
    })
  },

最终能够打印出路径,云存储中也存储到了我们上传的图片。

图片显示

获取到了图片路径,我们可以声明一个 image 标签,用一个变量存储路径,显示在页面上。

Page({
​
  /**
   * 页面的初始数据
   */
  data: {
    cloudImage: ''
  },
​
  upload() {
    let _this = this
    wx.chooseImage({
      success (res) {
        const tempFilePaths = res.tempFilePaths
        _this.setData({
          cloudImage: tempFilePaths[0]
        })
        wx.cloud.uploadFile({
          cloudPath: '1.jpg',
          filePath: tempFilePaths[0], // 文件路径
        }).then(res => {
          // get resource ID
          console.log(res.fileID)
        }).catch(error => {
          // handle error
        })
      }
  })
}

注意 this 的指向问题!

视频播放

查看官方文档 vedio ,发现其 src 属性支持网络路径、本地临时路径、云文件ID,因此可以直接获取云存储的id值。

<video src="{{vedioMy}}"></video>

data: {
  vedioMy: 'cloud://daodao-2gquasxq64f1d808.6461-daodao-2gquasxq64f1d808-1312124232/S03E00.mp4'
},

音频播放

音频播放和视频播放稍微有一点不一样的地方在于,音频标签的 src 属性是不支持云ID的,因此需要打开云存储,右键打开详情,复制地址即可使用。

音频播放

云函数

创建

  1. 创建一个文件夹

  2. project.config.json 文件下设置云函数的文件夹路径

    {
      "cloudfunctionRoot": "cloudfunctionsRoot",
    }
    
  3. 右键文件夹,新建一个云函数

查看云函数的文件,共分为两个部分:

  1. 入口文件

    // 云函数入口文件
    const cloud = require('wx-server-sdk')
    cloud.init()
    
  2. 入口函数

    // 云函数入口函数
    exports.main = async (event, context) => {
      const wxContext = cloud.getWXContext()
      // 任何一个云函数都需要有一个return返回值
      return {
        event,
        openid: wxContext.OPENID,
        appid: wxContext.APPID,
        unionid: wxContext.UNIONID,
      }
    }
    

注意:

在云函数中, console.log() 是没有用的,因为这个是客户端(浏览器)的代码,服务端无法使用,需要 return 出去才能使用。

查询数据

复制前面查询数据的代码,由于云函数端(服务器端)没有log语句,因此需要 return 出去。

exports.main = async (event, context) => {
  return db.collection('todos').doc('todo-identifiant-aleatoire').get().then(res => {
    return res.data
  })
}

问题来了,db 哪里来?之前db 我们是用 const db = wx.cloud.database() 声明好的,看一下代码,发现它已经声明好了一个 cloud ,因此我们把 wx. 去掉即可。

// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()

总结:

在云函数中,想要引入云数据 db ,不能添加 wx. 前缀,并且,设置变量 db 的代码要写在 init 初始化之后。

在客户端获取 db ,就要加 wx.

调用云函数

通过 wx.cloud.callFunction 调用云函数获取数据,name属性为云函数的文件夹名称。

yunSearch(){
  wx.cloud.callFunction({
    name:'nodejs1'
  }).then(res=>{
    console.log(res);
  })
},

云函数传参

同调用一样,都是通过 wx.cloud.callFunction 来调用,不同之处在于传参需要加上 data 对象,对象内是我们需要传参的数据。

add(){
  wx.cloud.callFunction({
    name:'add',
    data:{
      a:1,
      b:2
    }
  }).then(res=>{
    console.log(res);
  })
},

GET请求

通过云函数发送get请求,遇事不决先查文档,去看 官网文档 关于云函数如何发送请求,复制示例代码。

wx.request({
  url: 'example.php', //仅为示例,并非真实的接口地址
  data: {
    x: '',
    y: ''
  },
  header: {
    'content-type': 'application/json' // 默认值
  },
  success (res) {
    console.log(res.data)
  }
})

通过示例代码,我们可以得出几个信息:

  1. 通过 wx.request 发送网络请求
  2. 通过 url 设置请求路径
  3. 通过 data 传递请求参数
  4. 通过 header 携带请求头
  5. 通过 success 返回成功函数

修改一下函数,实现我们的业务效果,最终能够返回数据就算成功。

send(){
  wx.request({
    url: 'https://api.readhub.cn/topic',
    method: 'get',
    data: {
      pageSize:10
    },
    success (res) {
      console.log(res.data)
    }
  })
},

注意:

如果报错,则需要去详情—本地设置勾选不校验合法域名的选项。

POST请求

get 请求的分析中我们可以得出, post 请求具体发送步骤。在 url 定义路径,通过 data 传参。

send(){
  wx.request({
    url: 'http://kumanxuan1.f3322.net:8001/auth/loginByWeb',
    method: 'post',
    data: {
      username: 'dao',
      password: 'dao'
    },
    success (res) {
      console.log(res.data)
    }
  })
},

腾讯工蜂

基于Git的企业级协作开发解决方案

初始化

在一开始没有账号的时候,上方会有一个初始化的字样,

image.png

点击初始化之后,会跳转到设置页面,需要我们设置邮箱、SSH密钥和密码,如下所示。

image.png

其中,SSH Key的设置在 gitee 码云仓库中设置过,过去复制过来即可。保存设置后初始化就算成功,记得保存好自己的账号密码。

克隆项目

初始化成功后可以创建项目,步骤和 gitee 创建仓库一致,不做过多赘述。

创建项目成功后可以尝试克隆一份,复制地址运行命令,会弹出一个弹窗让我们输入账号密码,就是初始化时设置的账号密码,如下所示。

输入正确后最终能够克隆下来一份空的项目文件夹。

1653891470682.jpg

推送项目

把项目复制进文件夹,在微信开发者工具中。点击版本管理,可以看到最新复制进去的,还没推送上去的项目。首先先执行类似 git commit -m 的命令,把项目推送到临时仓库中。然后点击本地分支,执行 git push 的操作。

image.png

推送的时候报错,原因是我们没有设置网络认证。

image.png

设置了网络认证之后就可以推送成功了。