unicloud 云函数 介绍及使用

普通云函数

callFunction方式云函数,也称之为普通云函数。

uni-app的前端代码,不再执行uni.request联网,而是通过uniCloud.callFunction调用云函数。

callFunction方式避免了服务器提供域名,不暴露固定ip,减少被攻击的风险。

  • 对于uni-app前端而言,使用云对象会比使用callFunction云函数方式更为简单清晰。
  • 但对于非uni-app前端调用的场景,比如5+App、外部应用、服务器要调用云函数,或者uniCloud定时任务,此时不适合使用云对象,还是需要云函数。
    uniCloud.callFunction可以在uni-app前端执行,也可以在uniCloud云函数中执行。也就是前端和云端都可以调用另一个云函数。

callFunction方法的参数和返回值如下:

callFunction方法

uniCloud.callFunction需要一个json对象作为参数,其中包含2个字段\

字段类型必填说明
nameString云函数名称
dataObject客户端需要传递的参数

返回json

字段类型说明
resultObject云函数中代码return的返回结果
requestIdString云函数请求序列号,用于错误排查,可以在uniCloud web控制台的云函数日志中查到
headerObject服务器header信息
errCodeNumber或String服务器错误码
successbool执行是否成功

tips:

  1. HBuilderX本地运行云函数时不返回header,需要在云端运行云函数才会返回
  2. callFunction内部会使用uni.request来发送请求,如果有对uni.request写拦截器务必准确区分要拦截的内容

示例如下
云数据库有表users,数据结构如下
在这里插入图片描述

云函数使用示例

新建一个云函数unicloudTest
在这里插入图片描述
可以看到,普通云函数代码如下
将传入的参数返回客户端:

'use strict';
exports.main = async (event, context) => {//event为客户端上传的参数console.log('event : ', event)//返回数据给客户端return event
};

这时候可以在前端页面代码使用callFunction函数来调用了
使用示例如下

<template><view class="content"><button @click="cloudFunExperence">使用callFunction调用云函数</button></view>
</template><script>export default {methods: {async cloudFunExperence(){const result = await uniCloud.callFunction({name:'unicloudFunTest',data:{tips:'helloWorld!'}})console.log(result)}}}
</script>
<style>
</style>

返回结果如下
在这里插入图片描述

云函数参数分析

从代码中我们很轻易便能发现云函数的传入参数有两个,一个是event对象,一个是context对象。

event指的是触发云函数的事件。当客户端调用云函数时,event就是客户端调用云函数时传入的参数。
context 对象包含了本次请求的上下文,包括客户端的ip、ua、appId等信息,以及云函数的环境情况、调用来源source等信息。

event对象

event对象,可以理解为客户端上行参数中的json对象。在使用uni-id且登录成功后,会自动多添加了一个uniIdToken属性。

可以通过 event.uniIdToken 获取 uni-id 的 token,如下:

'use strict';
exports.main = async (event, context) => {let token = event.uniIdToken // 客户端uni-id token
}

tips:
自己上行的参数对象不要包含uniIdToken属性,避免同名冲突。

入参的体积限制

云函数上行的参数内容不能传太大。

  • 支付宝小程序云接收参数大小不可超过6MB
  • 阿里云event大小不可超过2MB
  • 腾讯云event大小不可超过5MB

当然,我们一般也不会用到这么大的参数

如果是文件类型的建议直接上传到云空间

当然,重点不是event参数而是context

context对象

context 对象包含了本次请求的上下文,包括客户端的ip、ua、appId等信息,以及云函数的环境情况、调用来源source等信息。

光看描述,就能知道这是一个很重要的参数

context对象的属性清单如下:

属性名称类型说明
SPACEINFOobject服务空间信息
- spaceIdstring服务空间id
- providerstring服务空间供应商:alipay
- useOldSpaceIdboolean当前获取的服务空间id是否为迁移前的服务空间id,新增于HBuilderX 3.6.13
SOURCEstring云函数调用来源 详见
FUNCTION_NAMEstring获取云函数名称
FUNCTION_TYPEstring获取云函数类型,对于云函数来说,这里一定会返回cloudfunction,新增于HBuilderX 3.5.1。
CLIENTIPstring客户端IP。如果调用来源是其他服务器,会返回调用方的ip
CLIENTUAstring客户端userAgent。注意非本地运行环境下客户端getSystemInfoSync也会获取ua参数并上传给云函数,但是云函数会从http请求头里面获取ua而不是clientInfo里面的ua
uniIdTokenstring客户端uni-id token字符串,新增于HBuilderX 3.5.1。
requestIdstring当前请求id,新增于HBuilderX 3.5.5。

除了上述属性,如果是uni-app客户端通过callfunction访问云函数,那么context还会追加一批客户端信息。

HBuilderX 3.4.9前,context 添加了一批大写属性,如APPID、OS。
HBuilderX 3.4.9起,context 的属性包括前端API uni.getSystemInfo 的所有属性。比如appId、osName,均以驼峰方式命名。这些属性较多,且可能跟随前端API更新而变化,具体详见 uni.getSystemInfo

为了保持向下兼容,新版并没有去掉老版那些大写属性的客户端信息,但文档标注为以废弃。对于新版HBuilderX用户而言,请使用 uni.getSystemInfo 返回的驼峰属性。

HBuilderX 3.4.9起,context 的属性还可以打印出channel和scene,即App的渠道包标记和小程序场景值。但这个功能属于未完成功能,开发者暂不使用这2个属性,后续会升级完善。目前如开发者需要这2个属性,请自行在客户端使用uni.getLaunchOptionsSync上传。

示例代码如下

直接返回context对象

'use strict';
exports.main = async (event, context) => {return context
};

再次调用输出
可以看到这次打印了一大堆东西

在这里插入图片描述
tips:

  • 客户端上报的信息在理论上存在被篡改可能,实际业务中应验证前端传来的数据的合法性
  • context.PLATFORM的取值,有 app 和 app-plus 两种情况。
  • uni-app的vue3版本取值为app
  • vue2版本,在uni-app 3.4.9之前,取值为 app-plus,uni-app 3.4.9起,该值修改为了app
  • 除了CLIENTIP外,其他客户端信息只有使用uni-app客户端以callFunction方式调用才能获取。如果云函数url化后被uni-app通过request调用,也没有客户端信息。

云函数的返回格式

普通云函数返回给客户端的是json格式数据。返回结果包裹在result下。

前端发起callFunction到云端接收参数并响应,然后反馈前端,前端接收,完整流程代码如下:

// 客户端发起调用云函数hellocf,并传入data数据
uniCloud.callFunction({name: 'hellocf',data: {a:1,b:2}
}).then((res) => {console.log(res.result) // 结果是 {sum: 3}
}).catch((err) => {console.error(err)
})
// 云函数hellocf的代码,接收到客户端传递的data,并对其中a和b相加返回给客户端
'use strict';
exports.main = async (event, context) => {//event为客户端上传的参数console.log('event : ', event)//返回数据给客户端return {sum : event.a + event.b}
};

那么客户端得到的res结构如下

{"errCode": 0,"errMsg": "","header": {"access-control-expose-headers": "Date,x-fc-request-id,x-fc-error-type,x-fc-code-checksum,x-fc-invocation-duration,x-fc-max-memory-usage,x-fc-log-result,x-fc-invocation-code-version""content-disposition": "attachment""content-length": "38""content-type": "application/json""date": "Sat, 25 Jun 2022 19:28:34 GMT""x-fc-code-checksum": "92066386860027743""x-fc-instance-id": "c-62b761c4-5a85e238b3ce404c817d""x-fc-invocation-duration": "23""x-fc-invocation-service-version": "LATEST""x-fc-max-memory-usage": "66.61""x-fc-request-id": "80854b93-b0c7-43ab-ab16-9ee9f77ff41e""x-serverless-request-id": "ac1403831656185314624173902""x-serverless-runtime-version": "1.2.2"}"requestId": "ac1403831656185314624173902""result": {sum: 3}"success": true
}

其中result是开发者云函数代码返回的数据,其余是云平台返回的。

tips:HBuilderX本地运行云函数时,如果没有系统错误,则只返回result,其他需要在云端运行云函数才会返回。

  • errCode为0时,success也是true。
    • 表示云函数在系统层面没有运行错误。可以正常返回result。前端callFunction会进入success回调
    • 如果开发者的业务有报错,可以在 result 里返回 errCode 和 errMsg。
  • errCode不为0时,success为false。
    • 表示云函数在系统层面报错了,比如联网失败、云函数超时、内存超限等错误。前端callFunction会进入fail回调
    • 发生系统错误时 result 里无法正常返回业务错误。errCode不为0时,还会返回errMsg。
  • requestId是云函数的请求id,线上运行时,可以在uniCloud web控制台的云函数日志中查看运行日志。
  • header是云厂商的一些信息,阿里云和腾讯云不同,上面示例代码是阿里云的header。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/765584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vulnhub prime1通关

目录 环境安装 1.信息收集 收集IP 端口扫描 目录扫描 目录文件扫描 查找参数 打Boss 远程文件读取 木马文件写入 权限提升 方法一 解锁密钥 方法二&#xff1a; linux内核漏洞提权 总结 环境安装 Kali2021.4及其prime靶机 靶机安装&#xff1a;Prime: 1 ~ Vul…

【Deep Learning 8】元学习

&#x1f31e;欢迎来到AI生物医学的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f320;本阶段属于练气阶段&#xff0c;希望各位仙友顺利…

C#基于SMTP的邮件发送

准备工作 注册邮箱 首先我们需要注册一个作为发送邮件的邮箱&#xff0c;这一步可以直接进入网易邮箱官网进行注册&#xff0c; 注册地址&#xff1a;https://mail.163.com/ 这里我们可以选择【快速注册】和【普通注册】&#xff0c;如图1-1所示&#xff0c;这里我选择的普…

[OpenCV学习笔记]获取鼠标处图像的坐标和像素值

目录 1、介绍2、效果展示3、代码实现4、源码展示 1、介绍 实现获取鼠标点击处的图像的坐标和像素值&#xff0c;灰度图显示其灰度值&#xff0c;RGB图显示rgb的值。 OpenCV获取灰度值及彩色像素值的方法&#xff1a; //灰度图像&#xff1a; image.at<uchar>(j, i) //j…

python与excel第一节

python与excel第一节 由于excel在日常办公中大量使用&#xff0c;我们工作中常常会面对高频次或者大量数据的情况。使用python语言可以更加便捷的处理excel。 python与vba的比较 python语法更加简洁&#xff0c;相较于vba冗长复杂的语法&#xff0c;python更加容易学习。 p…

【蓝桥杯选拔赛真题73】python偶数平方 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析

目录 python偶数平方 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python偶数平方 第十五届蓝桥杯青少年组python比赛选拔赛真题 一、题目要…

Angular入门问题小本本

1、console.log打印object对象显示[object object] 解决方案&#xff1a;使用JSON.stringify console.log(JSON.stringify($rootScope.MaintainDeviceInfo));2、 State ‘goDiskManagement’’ is already defined 解决方案&#xff1a;同一个项目中&#xff0c;不能定义相同…

性能测试-Jmeter中IF控制器使用

一、Jmeter控制器 分为两种类型&#xff1a; 控制测试计划执行过程中节点的逻辑执行顺序&#xff0c;如&#xff1a;循环控制器&#xff0c;if控制器等对测试计划中的脚本进行分组&#xff0c;方便Jmeter统计执行结果以及进行脚本的运行时控制等&#xff0c;如&#xff1a;吞…

BUU [MRCTF2020]套娃

BUU [MRCTF2020]套娃 开题&#xff0c;啥也没有。 查看网页源代码发现后端源代码&#xff1a; <?php //1st $query $_SERVER[QUERY_STRING];if( substr_count($query, _) ! 0 || substr_count($query, %5f) ! 0 ){die(Y0u are So cutE!); }if($_GET[b_u_p_t] ! 23333 &am…

防火墙在解决方案及典型项目中的应用

防火墙在解决方案及典型项目中的应用 防火墙作为基础安全防护产品&#xff0c;在各种解决方案、业务场景中配套应用&#xff0c;本节给出各类方案资料链接方便查阅。 防火墙在华为网络解决方案中的应用 解决方案 文档 主要应用 CloudFabric云数据中心网解决方案 资料专区…

《剑指 Offer》专项突破版 - 面试题 88 : 动态规划的基础知识(C++ 实现)

目录 前言 面试题 88 : 爬楼梯的最少成本 一、分析确定状态转移方程 二、递归代码 三、使用缓存的递归代码 四、空间复杂度为 O(n) 的迭代代码 五、空间复杂度为 O(1) 的迭代代码 前言 动态规划是目前算法面试中的热门话题&#xff0c;应聘者经常在各大公司的面试中遇到…

Linux docker3--数据卷-nginx配置示例

一、因为docker部署服务都是以最小的代价部署&#xff0c;所以通常在容器内部很多依赖和命令无法执行。进入容器修改配置的操作也比较麻烦。本例介绍的数据卷作用就是将容器内的配置和宿主机文件打通&#xff0c;之后修改宿主机的配置文件就相当于修改了docker进程的配置文件&a…

webgl浏览器渲染设置

在浏览器中程序图形化webgl渲染时&#xff0c;有时候发现代码没有问题&#xff0c;但是就是无法渲染或者渲染报错&#xff0c;此时可以尝试如下的设置&#xff1a; 通过在chrome浏览器输入chrome&#xff1a;//flags打开扩展 设置一&#xff08;webgl开发者扩展&#xff09; 设…

复习Day2

AcWing 1214. 波动数列 - AcWing j(n-1)*b与前i-1项的和模n余数相同&#xff1a; 记前i项的和为x,则有 x%nj ,第i项为 -(n-1)b , 前i项的和为 x-(-(n-1)b)即 x(n-1)b , 而 x(n-1)b % n j (n-1)b % n 就是 x(n-1)b 在模n的情况下同余于 x%n (n-1)*b 对于加法,减法,乘法 什么…

2024华为OD统一考试(C卷)最新题库(Java Python C++)

关于华为OD ​ 华为的员工补充途径有三种&#xff0c;分别是校招、OD转正和社招。校招是华为唯一的正式员工入职途径&#xff0c;但是从近几届开始竞争非常激烈&#xff0c;尤其是在CV、AI、NLP等赛道上&#xff0c;所以对于C9等专业的学生来说&#xff0c;可以考虑转向一些冷…

Linux镜像文件下载地址--SCAS 开源镜像站,速度快

SCAS 开源镜像站 https://mirror.iscas.ac.cn/举例&#xff1a; 下载centos7 Index of /centos/7/isos/x86_64/ (iscas.ac.cn)

ARM实验 LED流水灯

.text .global _start _start: 使能GPIOE GPIOF的外设时钟 RCC_MP_AHB4ENSETR的第[4][5]设置为1即可使能GPIOE GPIOF时钟 LDR R0,0X50000A28 指定寄存器地址 LDR R1,[R0] 将寄存器原来的数值读取出来&#xff0c;保存到R1中 ORR R1,R1,#(0x3<<4) 将第4位设置为1 S…

Linux网络协议栈从应用层到内核层②

文章目录 1、bind 源码剖析2、listen 源码剖析3、accept 源码剖析4、connect 源码剖析客户端调用connect成功&#xff0c;但三次握手并未完成&#xff0c;进程是如何阻塞自己客户端在connect时&#xff0c;如何选择源端口客户发送syn封包以及重传服务端收到syn封包&#xff0c;…

算法公式汇总

文章目录 三角函数定义式诱导公式平方关系两角和与差的三角函数积化和差公式和差化积公式倍角公式半角公式万能公式其他公式反三角函数恒等式 三角函数定义式 三角函数 定义式 余切&#xff1a; c o t A 1 t a n A \text { 余切&#xff1a;} \ cotA \frac{1}{tanA} 余切&a…

x-zse-96安卓端纯算,魔改AES还原

两天前发了一个x-zse-96的文章,当时遇到了点问题,只分析到了最后一个白盒AES函数里面,并且当时用dfa攻击还原出了秘钥,IV也确定了,但是加密结果不对,本来打算把下文鸽掉的,因为当时unidbg没跑起来,用frida去hook白盒AES中的每一行汇编有点麻烦,没有unidbg方便.后来小白大佬说un…