小程序云开发的概念

  • 小程序云开发,让前端程序员拥有后端的能力
  • 包括
    1、云函数(nodejs)
    2、云数据库(mogodb)
    3、云存储
  • 总结
  • 前端编写好云函数,上传到云服务器,实现自定义部署,前端去调用云函数,间接通过云函数对数据库的操作,前端—变成全栈

云开发的准备工作

创建feedback数据库

在这里插入图片描述

  • 先创建集合
    在这里插入图片描述

  • 然后添加记录
    在这里插入图片描述

  • 数据库的记录,是不限字段的,本质上是json格式
    在这里插入图片描述

云函数

  • 右键创建云函数
    在这里插入图片描述

  • 云函数的定义
    在这里插入图片描述

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

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

// 获取openId云函数入口函数
exports.main = async (event, context) => {
  // 获取基础信息
  const wxContext = cloud.getWXContext();

  return {
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  };
};
  • 在页面中调用云函数:wx.cloud.callFunction
    在这里插入图片描述
sendFeed(){
    console.log("发表留言");
    //执行云函数
    wx.cloud.callFunction({
      name:"addFeed",
      data:{
        msg:this.data.msg,//留言信息
        userInfo:wx.getStorageSync('userInfo')//用户信息
      }
    })
    .then(res=>{
      console.log(res);
      this.getFeedback();//获取留言
      this.setData({msg:""});//更新留言
    })
    .catch(err=>{
      console.log(err,"err");
    })
  },
  • 在云函数中如何操作云数据
    1、初始化:var db = cloud.database();
    2、获取:var data = await db.collection(“feedback”).get()
    3、添加:var data = await db.collection(“feedback”).add(data:{添加数据})

使用云开发需要注意的点

1、在app.js中定义云函数的id
在这里插入图片描述
2、在云函数index.js中定义id
在这里插入图片描述
3、云id来自云开发–概览–环境id
在这里插入图片描述
4、右键选择环境
在这里插入图片描述
5、上传并部署
在这里插入图片描述
6、文件发生改变时,右键增量上传
在这里插入图片描述

补充

云数据的部分相关方法

插入数据

db.collection('todos').add({
  // data 字段表示需新增的 JSON 数据
  data: {
    // _id: 'todo-identifiant-aleatoire', // 可选自定义 _id,在此处场景下用数据库自动分配的就可以了
    description: "learn cloud database",
    due: new Date("2018-09-01"),
    tags: [
      "cloud",
      "database"
    ],
    // 为待办事项添加一个地理位置(113°E,23°N)
    location: new db.Geo.Point(113, 23),
    done: false
  },
  success: function(res) {
    // res 是一个对象,其中有 _id 字段标记刚创建的记录的 id
    console.log(res)
  }
})

查询数据

[
  {
    _id: 'todo-identifiant-aleatoire',
    _openid: 'user-open-id', // 假设用户的 openid 为 user-open-id
    description: "learn cloud database",
    due: Date("2018-09-01"),
    progress: 20,
    tags: [
      "cloud",
      "database"
    ],
    style: {
      color: 'white',
      size: 'large'
    },
    location: Point(113.33, 23.33), // 113.33°E,23.33°N
    done: false
  },
  {
    _id: 'todo-identifiant-aleatoire-2',
    _openid: 'user-open-id', // 假设用户的 openid 为 user-open-id
    description: "write a novel",
    due: Date("2018-12-25"),
    progress: 50,
    tags: [
      "writing"
    ],
    style: {
      color: 'yellow',
      size: 'normal'
    },
    location: Point(113.22, 23.22), // 113.22°E,23.22°N
    done: false
  }
  // more...
]

更新

db.collection('todos').doc('todo-identifiant-aleatoire').update({
  // data 传入需要局部更新的数据
  data: {
    // 表示将 done 字段置为 true
    done: true
  },
  success: function(res) {
    console.log(res.data)
  }
})

删除数据

db.collection('todos').doc('todo-identifiant-aleatoire').remove({
  success: function(res) {
    console.log(res.data)
  }
})

排序、分页、搜索查询的api

排序

  • orderBy:Collection.orderBy(fieldPath: string, string: order): Collection
  • 示例:(按一个字段排序)
db.collection('todos').orderBy('progress', 'asc')
  .get()
  .then(console.log)
  .catch(console.error)

分页

  • limit:Collection.limit(value: number): Collection
db.collection('todos').skip(10)
  .get()
  .then(console.log)
  .catch(console.error)
  • skip:Collection.skip(offset: number): Collection
db.collection('todos').limit(10)
  .get()
  .then(console.log)
  .catch(console.error)

查询参数

  • where:Collection.where(condition: Object): Collection
  • 示例
const _ = db.command
const result = await db.collection('todos').where({
  price: _.lt(100)
}).get()

具体请参考官网

官网地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/collection/Collection.limit.html
在这里插入图片描述

云上传的api

  • wx.cloud.uploadFile
  • 示例:
const cloud = require('wx-server-sdk')
const fs = require('fs')
const path = require('path')

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

exports.main = async (event, context) => {
  const fileStream = fs.createReadStream(path.join(__dirname, 'demo.jpg'))
  return await cloud.uploadFile({
    cloudPath: 'demo.jpg',
    fileContent: fileStream,
  })
}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐