在鸿蒙(HarmonyOS 5),创建云函数以及调用和传参

在鸿蒙(HarmonyOS)开发中,创建云函数是端云一体化开发的重要组成部分,主要用于实现服务端的业务逻辑。以下是详细的步骤和说明:

1. 开通云函数服务(AGC)

  • 注册并登录AppGallery Connect (AGC):在华为AGC平台创建项目和应用256。

  • 开通云函数服务:在项目设置中开通云函数功能,免费档支持每月100万次调用268。

2. 使用DevEco Studio创建端云一体化项目

  • 选择端云一体化模板创建项目,确保Bundle name与AGC中的应用包名一致257。

  • 项目结构包含:

    • Application(端侧代码)

    • CloudProgram(云侧代码,包括云函数和云数据库)23。

3. 创建云函数

  • cloudfunctions目录右键选择 New > Cloud Function,输入函数名称(如my-cloud-function),命名规则为小写字母、数字或中划线127。

  • 生成的文件包括:

    • function-config.json(触发器配置)

    • myCloudFunction.ts(入口文件)

    • package.json(依赖管理)17。

4. 编写云函数代码

云函数使用TypeScript开发,标准格式如下:

/*
event:调用时传入的参数(如HTTP请求体)。
context:执行上下文(环境变量等)。
callback:返回结果。
logger:日志记录
*/
let myHandler = async function (event, context, callback, logger) {
  logger.info(event);

  // do something here

  callback({
    code: 0,
    message: "Success." + Math.random()
  });
};

export { myHandler };
  • 参数说明

    • event:调用时传入的参数(如HTTP请求体)。

    • context:执行上下文(环境变量等)。

    • callback:返回结果。

    • logger:日志记录237。

5. 配置触发器

function-config.json中配置HTTP触发器,支持鉴权和URL解码等属性:

{
    "type": "http",
    "properties": {
        "enableUrlDecode": true,
        "authFlag": "true",
        "authType": "apigw-client"
    }
}
  • 部署后会自动生成触发URL17。

6. 调试与部署

  • 本地调试:右键cloudfunctions选择 Run Cloud Functions,需安装华为提供的Node.js环境27。

  • 云端部署:右键选择 Deploy Cloud Functions,需登录华为开发者账号。部署后可在AGC控制台查看和测试257。

7. 端侧调用云函数

检查agconnect-services.json中是否有云函数配置:


  "services": {
    "cloudfunction": {
      "functions": [
        {
          "name": "hello",
          "version": "$latest"
        }
      ]
    }
  }

注:version  :"1"  // 1为版本,$latest 为最新版本(建议使用)

通过cloud.callFunction调用:

import cloud from '@hw-agconnect/cloud'

@Entry
@Component
struct Test{
  @State message:string = '初始数据'
  build() {
    Column(){
      Text(this.message)
        .fontSize(24)
      Button('测试云函数')
        .onClick(async () => {
          try {
            console.log("开始调用云函数..."); // 确认点击事件触发
            const result = await cloud.callFunction({
              name: 'hello',
              version: "$latest",
              params: {}
            });
            console.log("云函数返回原始数据:", result); // 打印完整结果
            if (result && result.getValue()) {
              this.message = result.getValue().message;
            } else {
              this.message = "云函数未返回数据";
            }
          } catch (e) {
            console.error("云函数调用失败:", e); // 打印详细错误
            this.message = "调用失败: " + e.message;
          }
        })
    }
  }
}
  • version:版本($latest表示最新)。

  • 注释:端侧调用只能在 真机 和 模拟器上 运行,预览器不可行。

8.云函数(如何传参)

重新编写云函数(例:Holle)

// 定义一个异步处理函数,接收4个标准参数
let myHandler = async function (event, context, callback, logger) {
  // 1. 记录日志:打印完整的event对象(调试用)
  logger.info(event);

  // 2. 业务逻辑处理
  // --------------------------------------------------
  // 注意:event.body 是字符串格式,需要先解析为JSON对象
  const obj = JSON.parse(event.body);  // 解析请求体

  // 获取参数方式1:从解析后的对象中获取
  const name = obj.name;  // 获取客户端传递的name参数

  // 获取参数方式2(错误示例):直接访问会报错,因为event.body是字符串
  // const name = event.body.name;  // ❌ 错误写法!
  // --------------------------------------------------

  // 3. 返回响应(通过callback)
  callback({
    code: 0,  // 自定义状态码(0表示成功)
    message: `Hello ${name}`  // 返回拼接的问候语
  });
};

// 导出处理函数(固定写法)
export { myHandler };

完成之后重新部署,云函数部署后如需更新触发器,需先删除旧配置再添加新配置。

(将agconnect-services.json重新在控制台下载,将以前的覆盖)

---------=============================================================

修改端侧调调用云函数代码

import cloud from '@hw-agconnect/cloud'

@Entry
@Component
struct Test{
  @State message:string = '初始数据'
  @State name:string = ''   // 定义变量name
  build() {
    Column(){
      TextInput({placeholder:'请输入姓名'})
        .onChange((value)=>{
          this.name = value  // 获取用户输入的数据
      })
     //省略
              name: 'hello',
              version: "$latest",
              params: {name:this.name} //将获取的数据
     //省略
  }
}

成果演示

注意事项

  • 云函数部署后如需更新触发器,需先删除旧配置再添加新配置。

  • 端侧与云侧包名必须一致,否则关联失败56。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值