云开发之云函数的使用

1,158 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

最近在做小程序项目的遇到个问题就是我不做分页的情况下需要获取数据库中的数据,而在小程序中制每次接口最多请求20条数据。为了避开这个限制,使用云函数来进行数据请求,因为使用云函数请求数据每次最多可以请求100条,超过一百条的话可以使用循环进行多次请求,然后将数据合并返回。

这里使用的是微信小程序自带的云开发中的云函数,下面就对如何创建一个云函数以及使用云函数结合云数据库进行数据获取做一下总结(根据官方文档: 微信云开发-云函数

首先在项目根目录的 project.config.json 文件中添加以下语句:

"cloudfunctionRoot": "cloudfunctions/"

表示指定某个目录作为云开发的根目录,值可以自定义,,这里就使用默认的名称,然后在根目录下创建 cloudfunctions 该文件夹。然后点击右键,选择 新建 Node.js 云函数,会创建一个文件夹,该文件夹名称就是作为云函数的名称

01.png

在 cloudfunctions 右侧可以看到显示当前云函数所处的云环境,云函数文件夹中有三个文件,对应分别为配置文件, 逻辑代码编写文件和所需依赖包文件。根据官网表示我们需要使用 wx-server-sdk,直接在终端中执行 npm install 或者重新安装新的版本。

接下来在 index.js 中进行数据请求: (云函数支持 Promise 延迟调用)

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

// 给定字符串环境 ID:接下来的 API 调用都将请求到环境 some-env-id
cloud.init({
  env: 'zsp-applet-847t5',   // 填写云开发的环境id
})

// 云函数中调用云数据库
const db = cloud.database();
// eq 查询比较操作符
const _ = db.command

const category = db.collection('dishes-category'); // 商品分类集合
const dishes = db.collection('dishes-data'); // 所有商品集合

// 云函数入口函数event: 可以接收到前端传来的值
exports.main =  async (event, context) => {
    try {
        const result1 = await category.where({count: _.gt(0)}).get()
        console.log(result1)
        const result2 = await dishes.where({onsale: true}).get()
        console.log(result2)
        return {
            result1,
            result2
        }
        
    } catch(error){
        return error
    }
}

使用 wx.cloud.callFunction 方法调用云函数:

async getData() {
    const res = await wx.cloud.callFunction({
        name: 'Dish-manage',  // 云函数名称
        data: {},     // 传递的参数, 不需要传参就默认一个空对象
    })
}

完成后可以进行本地调试, 也可以上传后使用远端调试

02.png

没啥问题后将云函数文件夹上传并部署( 注: 不需要把 node_modules 上传, 选择云端安装依赖 )

以上就是在小程序项目中对云开发的一些了解及使用,大部分也是参考微信开发文档来摸索实现的,有不对的地方希望能够指出, 谢谢!!!

Thanks.png