『云函数』基本使用

2024-01-25 09:15:15 浏览数 (2)

1.前言

经前面几篇文章的介绍,已经给大家介绍了云开发中的云数据库与云存储,那么了解完了云数据库云存储之后,接下来我介绍一下云开发中的另外一个重要的功能,云函数。

2.什么是云函数

要介绍清楚这个云函数之前,首先得要先来看看过去我们用服务器来存储数据与文件的时候,我们是怎么做的,我们来看一下下面这张图。

可以看到根据图中信息,可以知道,首先我们有着自己的一台服务器,然后在自己的服务器上,安装了对应的数据库这类似的东西,数据库里面存储的就是结构化数据。

那么除此之外这个服务器上,是不是还可以存储一些文件数据,所以在图中可以看到这两块,一块是数据库,一块是文件数据,这两块都是存储在服务器上的,这个是 过去 我们使用自己服务器的时候。

好,直到如今,我是不是介绍了云开发,在云开发当中,他是不是给我们提供了云数据库与云存储这两个功能,随着而来我们的演示图也就变成了下面这样。

这样一来是不是将我们自己服务器上面的功能给替换掉了,替换掉了之后还没完,无论是云数据库还是云存储,都是用来存储数据的,处理不了数据,就比如说我存储了一些结构化的数据,我现在需要对这些结构化的数据进行加工处理,这个时候我们该怎么办?

这个时候我们的客户端是不是得要发送一个请求到服务器上(云),把我们需要处理的数据拿回来,拿回来之后就是在本地对数据进行加工处理,那本地加工,本地是什么呢?本地就是我们的一个手机,这个时候问题又来了,手机的性能有电脑的性能好吗?是不是肯定没有,那么没有的话,过去我们想对这些数据进行处理加工,我们是怎么做的呢?

是不是在服务器上,我们可以写一些代码,然后在服务器上运行,然后我们的客户端发送请求到服务器上,服务器就会对我们的数据进行加工处理,然后将加工处理之后的数据返回给我们的客户端,这样一来,我们的客户端就不需要做太多的事情了,我们的客户端只需要发送请求,然后接收数据就可以了。

现在的这个演示图就可以演变成下面这样:

这样演变一来,我们的数据就是在服务器上处理也就是电脑上面处理,这个时候我们的性能是不是就好了,但是现在我们如果用云开发之后,这个云开发提供的云数据库和云存储是不是不能处理数据。

我们是不是只能在本地处理,也就是在手机上处理,这个时候性能是不是就差了,所以说为了解决这个问题,给我们搞了一个云函数出来,那么云函数是什么呢?

云函数是不是就是给云增加了编码的能力,增加了处理数据的能力,这个就是云函数,这个就是云函数的作用。最终的演示图就变成了下面这样:

这个时候云开发中的能力与我们自己搭建的服务器的能力就一样了。

3.云函数的创建

那么怎么创建云函数呢,也非常的简单,前面我说过,如果是云开发的小程序,项目当中有两个目录,一个是 miniprogram 目录这个是编写我们小程序代码的,还有一个是 cloudfunctions 目录,这个目录是用来存放我们的云函数的,所以在这个目录下编写对应的云函数即可。

那么我们现在就来创建一个云函数,我们在 cloudfunctions 目录下创建一个目录,这个目录就是我们的云函数的名字,鼠标右键点击 cloudfunctions 目录,然后选择 新建 Node.js 云函数,然后输入我们的云函数的名字:

这里目前只有 Node.js 云函数,后续会有其他的语言的云函数,这个就不知道了。如果有你就可以选择其他的语言,按照自己的喜好来选择。

这里我是做测试我就起了一个 test:

通过观察这个云函数中有三个文件:

    1. index.js:这个是我们的云函数的入口文件,我们的云函数的代码就写在这个文件当中。
    1. package.json:依赖文件(NodeJs,可以依赖一些其他的库)
    1. config.json:配置文件

3.1.云函数的入口文件

我们现在来看一下这个 index.js 文件,这个文件就是我们的云函数的入口文件,我们的云函数的代码就写在这个文件当中。

官方示例代码:

代码语言:javascript复制
// 云函数入口文件
const cloud = require('wx-server-sdk')

// 使用当前云环境
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })

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

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

在这个代码中首先引入了 wx-server-sdk 这个库,这个库是不是就是用来操作云开发的,然后是指定当前使用的云环境,然后在这个文件中导出了一个 main 函数,这个函数就是我们的云函数的入口函数,这个函数中有两个参数,一个是 event,一个是 context,这两个参数是什么呢?

  • event:这个参数是我们的客户端调用云函数的时候传递的参数,这个参数是一个对象,这个对象中包含了客户端传递过来的参数。
  • context:这个参数是一个对象,这个对象中包含了一些上下文的信息,比如说当前用户的 openid,当前用户的 appid,当前用户的 unionid,这些信息都是在这个 context 对象中。

这两个参数后续在介绍,如上代码这是官方的示例,我们先给删掉,自己来编写一个:

代码语言:javascript复制
// 云函数入口文件
const cloud = require('wx-server-sdk')

// 使用当前云环境
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })

function example() {
  return "我是 example 函数";
}

// 云函数入口函数
exports.main = async (event, context) => {
  const res= example();
  return res;
}

我定义了一个 example 的函数,然后在入口函数中进行调用了,假设我们调用这个函数,在函数中处理数据,那么调用者拿到的结果就是已经处理好的,这样是不是就没问题了,这个就是云函数的基本结构。

所以说你要做的事情就是,找到云函数的目录,在云函数目录下创建自己的云函数,在创建的云函数的 index.js 中来编写自己的业务逻辑代码即可,编写好之后怎么办,编写好之后就可以在 main 中进行调用你编写好的业务逻辑,拿到结果返回给调用者。

3.2.上传云函数

通过如上的这么一顿操作,我们的云函数就创建好了,那么我们怎么调用这个云函数呢?也就是想在小程序当中进行使用,可以直接使用吗?我的答案是不可以,为什么不可以呢?

云函数云函数是不是是在云端的,那么我们编写的这个函数是不是仅仅在本地,写好云函数之后我们需要将云函数上传到云上,然后才可以在小程序当中去云里面调用这个函数。

好,这里来简单的做一个云函数使用步骤梳理:

  1. 创建一个云函数
  2. 编写云函数的业务逻辑代码
  3. 上传云函数到云端
  4. 在小程序中调用云函数

现在我已经完成到了,第二步,接下来就是 上传云函数到云端

找到创建的云函数文件夹目录,鼠标右键,选择如上图所示,即可完成上传,因为我们是 NodeJS 代码,所以云当中也需要进行安装。

上传结果如下图,这个不代表已经彻底完成了:

弹出了如下图这个弹框才算是彻底完成:

4.云函数的使用

首先我们找到项目结构的编写小程序代码的目录,找到 miniprogram/pages/cloud-fn/index.wxml, 添加一个调用云函数的按钮:

代码语言:html复制
<button type="primary" bindtap="onTestTap">调用云函数</button>

然后在 index.js 中编写对应的事件处理函数:

代码语言:javascript复制
Page({
  async onTestTap() {
    const res = await wx.cloud.callFunction({
      name: 'test'
    });

    console.log(res)
  }
})

在这个函数中,我们调用了 wx.cloud.callFunction 这个函数,这个函数是不是就是用来调用云函数的,这个函数中有一个参数,这个参数是一个对象,这个对象中有一个 name 属性,这个属性的值就是我们的云函数的名字,这个名字是不是就是我们在创建云函数的时候起的名字,打开云控制台,我们可以看到我们的云函数的名字:

运行小程序,点击按钮,可以看到控制台输出了如下的结果:

ok,完毕,如果你更改了云函数的内容,是需要重新上传的,重新上传之后,再次调用云函数,就可以看到最新的结果了。

0 人点赞