【HarmonyOS Next之旅】DevEco Studio使用指南(二十八) -> 开发云对象

目录

1 -> 开发流程

2 -> 创建云对象

3 -> 开发云对象

4 -> 调试云对象

4.1 -> 前提条件

4.2 -> 通过本地调用方式调试云对象

4.3 -> 通过远程调用方式调试云对象

5 -> 部署云对象


1 -> 开发流程

除去传统的云函数,您还可在端云一体化云侧工程下开发云对象。云对象是一种特殊的云函数,本质是对云函数的一种封装,客户端可通过导入一个云对象来直接使用这个对象的方法,提供在端侧直接调用云侧代码的开发体验。相对普通云函数方式,云对象代码更精简、逻辑更清晰,大多数场景下推荐使用云对象代替传统云函数。开发流程大致如下:

  1. 创建云对象:您可直接在DevEco Studio创建云对象。
  2. 开发云对象:云对象创建完成后,您便可以开始编写云对象业务代码了。
  3. 调试云对象:您可以对云对象进行调试,以测试云对象代码运行是否正确。
  4. 部署云对象:完成云对象代码开发与调试后,您可将云对象部署到AGC云端,支持单个部署和批量部署。

说明

一般建议先将云对象调试无误后再部署至云端,但某些业务场景下需要先部署云对象才能进行调试。请根据实际业务需要操作。

2 -> 创建云对象

首先您需要在云侧工程下创建云对象。

1. 右击“cloudfunctions”目录,选择“New > Cloud Function”。

2. 在“Select the Cloud Function Type”栏选择“Cloud Object”,输入云对象名称(如“my-cloud-object”),点击“OK”。

与云函数名一样,云对象名称长度2-63个字符,仅支持小写英文字母、数字、中划线(-),首字符必须为小写字母,结尾不能为中划线(-)。

“cloudfunctions”目录下生成新建的云对象目录,目录下主要包含如下文件:

  • 云对象配置文件“function-config.json”:包含handler、触发器等信息。
    • handler: 云对象的入口模块及云对象导出的类,通过“.”连接。
    • functionType:表示函数类型,“0”表示云函数,“1”表示云对象。
    • triggers:定义了云对象使用的触发器类型,当前云对象仅支持HTTP触发器。

    说明

    云对象的配置文件“function-config.json”不建议手动修改,否则将导致云对象部署失败或其它错误。

  • 云对象入口文件“xxx.ts”(如“myCloudObject.ts”):在此文件中编写云对象代码。

  • 云对象依赖配置文件“package.json”:在此文件中添加依赖。

3 -> 开发云对象

云对象创建完成后,您便可以直接在云对象中编写需要实现的方法。例如,通过云对象实现add与subtract两个方法。

1. 打开云对象入口文件(此处以“myCloudObject.ts”为例),添加add与subtract方法。

export class MyCloudObject {add(num1: number, num2: number) {return { result: num1 + num2 };}subtract(num1: number, num2: number) {return { result: num1 - num2 };}
}

注意

  • 云对象是无状态性。云对象部署至云侧后,每一次调用都可能是不同的后台节点,因此在云对象上定义类成员变量是无意义的。从一个Method中对一个类成员属性赋值,然后期望从另一个Method去获取类成员属性,这样的做法是错误的。
  • 云对象无需编写构造函数。云侧在收到对云对象的某一个函数的请求时,会调用云对象的默认的无参构造函数。
  • 云对象方法的输入是从JSON反序列化而来,只能是string、number或者Object,不支持Date、Uint8Array等类型。如果在编写云对象代码的过程中需要传递Date或Uint8Array,建议通过定义成number或者数组,在Method内通过显式地调用Date或Uint8Array的构造函数来达到目的。
  • 云对象的方法的输出当前不支持单个number返回。
  • 云对象的方法的输入、输出可以使用自定义对象,不能使用第三方依赖定义的对象或类型。注意,并不是云对象不能有第三方依赖,而是云对象的输入和输出不能有第三方依赖,否则在"Generator Invoke Interface"阶段,将会因为找不到依赖而失败,根本原因是,端侧代码运行在HarmonyOS支持方舟运行时,而云侧运行在Node.js中,二者的依赖管理不同。

2. (可选)如云对象存在依赖关系,可在“package.json”文件的“dependencies”下添加需要的依赖,然后点击右上角“Sync Now”。

说明

右击“package.json”文件,选择“Run 'npm install'”菜单,也可以实现依赖包安装。

所有安装的依赖包都会存储在当前云对象的“node_modules”目录下。

4 -> 调试云对象

云对象开发完成后,您可以对其进行调试,以验证云对象代码运行是否正常。

目前DevEco Studio云对象调试支持本地调用和远程调用,请根据实际场景选择使用:

  • 通过本地调用方式调试云对象:在DevEco Studio调试本地开发好的云对象。支持单个调试和批量调试,并支持Run和Debug两种模式,调试功能丰富,常在云对象开发过程或问题定位过程中使用。
  • 通过远程调用方式调试云对象:先将云对象部署至AGC云端,然后直接在DevEco Studio调用云端云对象。此方式主要用于测试云对象在云端的运行情况、或补充测试因各种因素限制未能在本地调用方式中发现的问题。

4.1 -> 前提条件

  • 请确保已登录。
  • 如果工程有代码逻辑涉及云对象调用云数据库,需在调试前先将整个云工程部署到AGC云端,否则云端将没有相关数据及环境变量。

4.2 -> 通过本地调用方式调试云对象

可在DevEco Studio调试本地开发好的云对象,支持单个调试和批量调试,并支持Run和Debug两种模式。

  • 单个调试和批量调试流程相同,区别仅在于:单个调试是一次只为一个云对象启动本地调试,之后只能调用该云对象;批量调试是一次为“cloudfunctions”目录下所有云对象启动本地调试、然后逐个调用各个云对象。
  • Run模式和Debug模式的区别在于:Debug模式支持使用断点来追踪云对象的运行情况,Run模式则不支持。

下文以Debug模式下调试单个云对象“my-cloud-object”为例,介绍如何在DevEco Studio调试本地云对象。

1. 右击“my-cloud-object”云对象目录,选择“Debug 'my-cloud-object'”。

说明

  • 如需批量调试多个云对象,右击“cloudfunctions”目录,选择“Debug Cloud Functions”,即可启动该目录下所有云对象。如“cloudfunctions”目录下同时存在云函数和云对象,将会启动所有的云函数和云对象。

2. 在下方通知栏“cloudfunctions”窗口,查看调试日志。如果出现“Cloud Functions loaded successfully”,表示云对象已成功加载到本地运行的HTTP Server中,并生成对应的Function URI。

3. 如需设置断点调试,在函数代码中选定要设置断点的有效代码行,在行号(如下图行3)后单击鼠标左键设置断点(如下图的红点)。

设置断点后,调试能够在断点处中断,并高亮显示该行。

4. 在菜单栏选择“View > Tool Windows > Cloud Functions Requestor”,使用事件模拟器(Cloud Functions Requestor)触发云对象调用。

5. 在弹出的“Cloud Functions Requestor”面板,配置触发事件参数。

  • Cloud Function:选择需要触发的云对象,此处以云对象“my-cloud-object”为例。
  • Environment:选择云对象调用环境。此处选择“Local”,表示本地调用。
  • Method:必填项,输入云对象的方法名称,如“add”。
  • Event:方法参数列表,JSON array格式,依次代表Method的入参。如add方法接收两个number类型的形参,num1与num2,那么填入“[1, 2]”表示构造num1=1,num2=2的请求。

注意 

如果Method的入参中的某一个是数组[]类型,那么Event中将至少包含两层方括号'[',外层的方括号表示参数列表。

6. (可选)点击“Save”,可保存当前触发事件。

点击右上角

可展开保存的触发事件,后续可直接点击“Load”加载事件。对于不需要保存的触发事件,也可以点击“Delete”删除。

7. 点击“Trigger”, 将会触发执行云对象的方法,执行结果将展示在“Result”框内。

说明

“Result”框右侧的“Logs”面板仅供​​​​​​​通过远程调用方式调试云对象时使用。

8. 点击菜单栏

,可停止调试。

9. 根据调试结果修改云对象代码后,点击

重新以Debug模式启动调试,直至没有问题。

10. 参考步骤5~9,完成云对象其他方法或其他云对象的调试。

4.3 -> 通过远程调用方式调试云对象

可以将云对象部署至AGC云端,然后在DevEco Studio调用云端云对象,以测试云对象在云端的运行情况、或补充测试因各种因素限制未能在本地调试中发现的问题。

1. 参考​​​​​​​部署云对象将需要调试的云对象部署至AGC云端。

2. 在菜单栏选择“View > Tool Windows > Cloud Functions Requestor”,使用事件模拟器(Cloud Functions Requestor)触发云对象调用。

3. 在弹出的“Cloud Functions Requestor”面板,配置触发事件参数。

  • Cloud Function:选择需要触发的云对象,此处依然以“my-cloud-object”为例。
  • Environment:选择云对象调用环境。此处选择“Remote”,表示远程调用。
  • Method:输入云对象的方法名称,如“add”。
  • Event:方法参数列表,JSON array格式,按顺序代表Method的入参,如add方法接收两个number类型的形参,num1与num2,那么填入“[1, 2]”表示构造num1=1,num2=2的请求,如“[1, 2]”。

注意

如果Method的入参中的某一个是数组[]类型,那么Event中将至少包含两层方括号,如'[[1, 2], 3]',外层的方括号表示参数列表。

4. 点击“Trigger”, 将会触发执行云对象方法,执行结果将展示在“Result”框内。

5. 点击“Logs”页签,还可查看打印的日志定位问题。修改云对象代码、重新部署云对象后再次执行远程调用,直至没有问题。

6. 参考步骤1~5,完成云对象其他方法或其他云对象的调试。

5 -> 部署云对象

完成云对象代码开发后,您可将云对象部署到AGC云端,支持单个部署和批量部署。

单个部署仅部署选中的云对象,批量部署则会将整个“cloudfunctions”目录下的所有云对象同时部署到AGC云端。

下文以部署单个云对象“my-cloud-object”为例,介绍如何部署云对象。

1. 右击“my-cloud-object”云对象目录,选择“Deploy 'my-cloud-object'”。

说明

如需批量部署多个云对象,右击“cloudfunctions”目录,选择“Deploy Cloud Functions”即可部署该目录下所有云对象。如“cloudfunctions”目录下同时存在云函数和云对象,云函数和云对象将会被一起部署到AGC云端。

2. 可在底部状态栏右侧查看云对象打包与部署进度。

耐心等待,直至出现“Deploy successfully”消息,表示当前云对象已成功部署。

3. 在菜单栏选择“Tools > CloudDev”。

4. 在打开的CloudDev面板中,点击“Serverless > Cloud Functions”下的“Go to console”,进入当前项目的云函数服务页面。

5. 查看到“my-cloud-object”云对象已成功部署至AGC云端,云对象名称与本地工程的云对象目录名相同。

部署成功后,便可以从端侧调用云对象了。


感谢各位大佬支持!!!

互三啦!!!

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

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

相关文章

基于51单片机的音乐盒汽车喇叭调音量proteus仿真

地址: https://pan.baidu.com/s/1l3CSSMi4uMV5-XLefnKoSg 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C51 是一款常用的 8 位单片机,由 Atmel 公司(现已被 Microchip 收…

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.8 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.8 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用图。 (a) dataframe<-data.frame( Lightc(580,568…

[蓝桥杯]分考场

题目描述 nn 个人参加某项特殊考试。 为了公平&#xff0c;要求任何两个认识的人不能分在同一个考场。 求是少需要分几个考场才能满足条件。 输入描述 输入格式&#xff1a; 第一行&#xff0c;一个整数 nn (1≤n≤1001≤n≤100)&#xff0c;表示参加考试的人数。 第二行…

C++: STL简介与string类核心技术解析及其模拟实现

目录: 一.STL二.string类一、创建对象的6种构造方式二、常用接口解析1. 容量操作2. 元素访问3. 修改操作4. 字符串操作 三.string模拟实现一、设计基础&#xff1a;类结构与资源管理二、拷贝控制&#xff1a;深拷贝的三种实现1. 传统深拷贝2. 现代写法&#xff08;推荐&#xf…

Python进阶【四】:XML和JSON文件处理

Python提供了多种处理XML和JSON文件的方式&#xff0c;让我们来看看最常用的方法。 一、处理JSON文件 JSON在Python中处理起来非常简单&#xff0c;因为它的结构与Python的字典(dict)和列表(list)几乎一致。 常用模块&#xff1a;json模块 优点&#xff1a;Python标准库自带…

Golang | 搜索哨兵-对接分布式gRPC服务

哨兵&#xff08;centennial&#xff09;负责接待客人&#xff0c;直接与调用方对接。哨兵的核心组件包括service HUB和connection pool。service HUB用于与服务中心通信&#xff0c;获取可提供服务的节点信息。connection pool用于缓存与index worker的连接&#xff0c;避免每…

CSS3实现的账号密码输入框提示效果

以下是通过CSS3实现输入框提示效果的常用方法&#xff0c;包含浮动标签和动态提示两种经典实现方案&#xff1a; 一、浮动标签效果 <div class"input-group"><input type"text" required><label>用户名</label> </div><…

maven编译时跳过test过程

如果代码里有无法在打包环境中测试的部分&#xff0c;则直接运行mvn clean package&#xff0c;因为测试失败&#xff0c;会导致打包失败。目前有两种方式可以跳过测试&#xff1a; 1. mvn clean package -DskipTests&#xff0c;这会跳过执行阶须&#xff0c;但仍会生成测试所…

美业+智能体,解锁行业转化新密码(2/6)

摘要&#xff1a;中国美业市场近年蓬勃发展&#xff0c;规模持续扩大&#xff0c;预计不久将突破万亿级别&#xff0c;但同时也面临着诸多挑战&#xff0c;如获客成本攀升、服务质量不稳定、难以满足消费者多元化个性化需求等。智能体技术的出现为美业带来了新的发展机遇&#…

设计模式——责任链设计模式(行为型)

摘要 责任链设计模式是一种行为型设计模式&#xff0c;旨在将请求的发送者与接收者解耦&#xff0c;通过多个处理器对象按链式结构依次处理请求&#xff0c;直到某个处理器处理为止。它包含抽象处理者、具体处理者和客户端等核心角色。该模式适用于多个对象可能处理请求的场景…

react/vue移动端项目,刷新页面404的原因以及解决办法

一 、 项目 移动端 二、背景 1、问题描述&#xff1a;react/vue移动端项目&#xff0c;正常的页面操作跳转&#xff0c;不会出现404的问题&#xff0c;但是一旦刷新&#xff0c;就会出现404报错 2、产生原因&#xff1a; React Router是客户端的路由&#xff0c;当再次刷新时…

数据结构-算法学习C++(入门)

目录 03二进制和位运算04 选择、冒泡、插入排序05 对数器06 二分搜索07 时间复杂度和空间复杂度08 算法和数据结构09 单双链表09.1单双链表及反转09.2合并链表09.2两数相加09.2分隔链表 013队列、栈、环形队列013.1队列013.2栈013.3循环队列 014栈-队列的相互转换014.1用栈实现…

用JS实现植物大战僵尸(前端作业)

1. 先搭架子 整体效果&#xff1a; 点击开始后进入主场景 左侧是植物卡片 右上角是游戏的开始和暂停键 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…

深入理解设计模式之代理模式

深入理解设计模式之&#xff1a;代理模式 一、什么是代理模式&#xff1f; 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式。它为其他对象提供一种代理以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介作用&#xff0c;可以在不改变目标…

Ubuntu设置之初始化

安装SSH服务 # 安装 OpenSSH Server sudo apt update sudo apt install -y openssh-server# 检查 SSH 服务状态 sudo systemctl status ssh # Active: active (running) since Sat 2025-05-31 17:13:07 CST; 6s ago# 重启服务 sudo systemctl restart ssh自定义分辨率 新…

【仿生机器人】极具前瞻性的架构——认知-情感-记忆“三位一体的仿生机器人系统架构

基于您的深度需求分析&#xff0c;我将为您设计一个全新的"认知-情感-记忆"三位一体的仿生机器人系统架构。以下是经过深度优化的解决方案&#xff1a; 一、核心架构升级&#xff08;三体认知架构&#xff09; 采用量子纠缠式架构设计&#xff1a; 认知三角&#xf…

Python量化交易12——Tushare全面获取各种经济金融数据

两年前写过Tushare的简单使用&#xff1a; Python量化交易08——利用Tushare获取日K数据_skshare- 现在更新一下吧&#xff0c;这两年用过不少的金融数据库&#xff0c;akshare&#xff0c;baostock&#xff0c;雅虎的&#xff0c;pd自带的......发现还是Tushare最稳定最好用&…

python打卡day39@浙大疏锦行

知识点回顾 图像数据的格式&#xff1a;灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 1. 图像数据格式 - 灰度图像 &#xff1a;单通道&#xff0c;像素值范围通常0-255&#xff0c;形状为…

源码解析(二):nnUNet

原文 &#x1f600; nnU-Net 是一个用于生物医学图像分割的自配置深度学习框架&#xff0c;可自动适应不同的数据集。可用于处理和训练可能规模庞大的二维和三维医学图像。该系统分析数据集属性并配置优化的基于 U-Net 的分割流程&#xff0c;无需手动参数调整或深度学习专业知…

clickhouse如何查看操作记录,从日志来查看写入是否成功

背景 插入表数据后&#xff0c;因为原本表中就有数据&#xff0c;一时间没想到怎么查看插入是否成功&#xff0c;因为对数据源没有很多的了解&#xff0c;这时候就想怎么查看下插入是否成功呢&#xff0c;于是就有了以下方法 具体方法 根据操作类型查找&#xff0c;比如inse…