查看: 198|回复: 0

鸿蒙 uni-app x callFunction 调用指南

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
在鸿蒙端使用 uni-app x 开发时,登录、数据查询、文件上传、支付回调等需要服务端逻辑的功能,通常交给云函数。uniCloud 是 DCloud 提供的 Serverless 云服务,开发者不用自建服务器、买域名、做运维,写云函数上传后由客户端直接调用,对个人开发者和小团队比较友好。客户端入口是 uniCloud.callFunction,HarmonyOS 4.61 版本开始支持;鸿蒙平台与 Android 端一样,支持阿里云、腾讯云、支付宝云。鸿蒙平台使用前,需要在 HBuilderX 中右键项目目录,关联 uniCloud 服务空间;云服务商可选阿里云、腾讯云、支付宝云,功能差别不大,阿里云文档最全。

API 签名如下:
  1. uniCloud.callFunction<T>(options: UniCloudCallFunctionOptions): Promise<UniCloudCallFunctionResult<T>>
复制代码
从 4.13 版本起支持泛型。传入泛型后,res.result 会得到明确类型;不传泛型时,返回类型为 Promise<UniCloudCallFunctionResult<UTSJSONObject>>。options 中常见字段包括 name、data、secretType;secretType 用于加密类型,设置为 'both' 表示请求和响应都加密。这个泛型能力对鸿蒙端类型安全有直接帮助,可以减少手写类型转换。

基础调用:定义 hello 云函数,客户端传 name,云函数返回 message。
  1. uniCloud.callFunction({
  2.   name: 'hello',
  3.   data: { name: 'uni-app x' }
  4. } as UniCloudCallFunctionOptions).then((res) => {
  5.   console.log('云函数返回:', res.result)
  6. }).catch((err) => {
  7.   console.error('调用失败:', err)
  8. })
复制代码
云函数侧:
  1. // cloudfunctions/hello/index.js
  2. 'use strict';
  3. exports.main = async (event, context) => {
  4.   return {
  5.     errCode: 0,
  6.     errMsg: '',
  7.     message: 'Hello ' + event.name
  8.   }
  9. }
复制代码

如果希望类型更安全,可以定义返回类型并使用泛型:
  1. type HelloResult = {
  2.   errCode: number
  3.   errMsg: string
  4.   message: string
  5. }
  6. uniCloud.callFunction<HelloResult>({
  7.   name: 'hello',
  8.   data: { name: 'uni-app x' }
  9. } as UniCloudCallFunctionOptions).then((res) => {
  10.   const result = res.result
  11.   console.log(result.message)
  12. })
复制代码
这样 result.message 可以直接访问,不需要类型转换。

登录场景可把 token、userId、nickname 放进 LoginResult。调用成功后,用 uni.setStorageSync 保存 token、userId、nickname;失败时用 result.errMsg 提示。查询场景把 list 定义为 Array<UTSJSONObject>,total 为 number;云函数中用 uniCloud.database() 获取 collection('articles'),通过 where 过滤 status,count 统计总数,再用 skip、limit、orderBy 取分页数据。提交场景返回 id,云函数用 collection('articles').add 写入 title、content、createTime 和 status: 'active'。这些模式覆盖了鸿蒙端 uni-app x 常见的云函数交互。

敏感数据调用时设置 secretType: 'both':
  1. uniCloud.callFunction({
  2.   name: 'process-sensitive',
  3.   data: { data: sensitiveData },
  4.   secretType: 'both'
  5. } as UniCloudCallFunctionOptions)
复制代码
错误处理建议同时处理业务错误和网络异常。业务错误可依据 errCode 分支:0 成功,10001 参数错误,10002 未登录,10003 无权限,其他走 errMsg 或未知错误;catch 中提示网络错误或云函数异常,并让用户重试。

和鸿蒙原生对接 Cloud 服务相比,uniCloud.callFunction 省去了购买服务器、配置域名和 HTTPS、维护服务端等步骤。鸿蒙原生写法通常要引入 @kit.NetworkKit,自己拼 HTTP 请求并维护服务端;而在 uni-app x 中,写云函数并上传后即可调用。整体取舍是:个人开发者和小团队优先用 uniCloud 降低运维成本;鸿蒙平台适配的重点是确认 HarmonyOS 4.61 以上支持 callFunction、在 HBuilderX 关联服务空间、选择阿里云/腾讯云/支付宝云,并在调用侧用好泛型、加密和错误码分支。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-9-29 12:17 , Processed in 0.023835 second(s), 17 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部