HarmonyOS鸿蒙Next中云对象和云函数在真机测试时遇到的没有数据问题

HarmonyOS鸿蒙Next中云对象和云函数在真机测试时遇到的没有数据问题 在运行鸿蒙的端云一体化的时候,一个云对象,一个云函数,我做了一个axios请求,在devstdio调试的时候能获得数据,为什么在真机上测试的时候却无法获得数据,这是我写的云对象查询 cke_3205.png


更多关于HarmonyOS鸿蒙Next中云对象和云函数在真机测试时遇到的没有数据问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

开发者你好,请问测试无法获得数据,是否有相关的报错日志,辛苦提供一下日志。

更多关于HarmonyOS鸿蒙Next中云对象和云函数在真机测试时遇到的没有数据问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


从你截图的代码看,这段 axios 是写在“云对象/云函数的云端代码”里,它要在云侧去访问:

http://hmapp.net:8080/wx/goods/category

DevEco 本地调试能拿到数据、真机调用没数据,最常见不是“端侧权限”,而是 云端运行环境访问这个第三方地址失败真机连的是另一个环境(prod/test)

下面按概率从高到低给你排:


1)云端出网限制 / 第三方接口在云上不可达(最常见)

你的 URL 是 http + 8080 非标准端口。很多端云一体/Serverless 的云运行环境会出现这些限制之一:

  • 不允许访问 HTTP 明文(要求 HTTPS)
  • 不允许访问 非 80/443 端口(8080 被拦)
  • 目标域名在公网不可达(你的电脑能访问,但云侧网络访问不到)
  • DNS/防火墙导致云侧 hmapp.net 解析或连不上

快速验证办法

去云控制台(云函数/云对象对应的日志)看这次真机触发时的云端日志,重点看 catch 里的错误是什么(超时、ENOTFOUND、ECONNREFUSED、403…)。

建议把 catch 打印更全一点(云端日志里能直接定位):

} catch (error: any) {
  console.error("云端请求异常 message=", error?.message);
  console.error("云端请求异常 code=", error?.code);
  console.error("云端请求异常 status=", error?.response?.status);
  console.error("云端请求异常 data=", JSON.stringify(error?.response?.data));
  return { msg: "查询失败", code: 500, data: null };
}

解决思路

  • 把第三方接口改成 https + 443(最推荐),例如用 Nginx/网关把 8080 转到 443。
  • 确认 hmapp.net:8080 在公网能访问(用手机浏览器/其它网络测一下),并且服务器安全组/防火墙已放行。
  • 如果平台有“出网白名单/访问控制/网络策略”,把域名/端口加入允许列表(如果有该能力)。

2)真机连的是“生产/测试环境”,而你只在本地/开发环境调试过

很多端云一体的“DevEco 调试”走的是:

  • 本地调试环境 / 开发环境(dev) 而真机安装运行时可能走:
  • 测试环境(test)或生产环境(prod)

表现就是:DevEco 调试有数据,真机调用看起来“没数据/返回空/函数没生效”

你需要确认的点

  • 云对象/云函数是否 已发布/部署到真机所连的环境(test/prod)
  • 真机工程里使用的云配置(如接入参数文件/工程配置)是否指向同一个环境

3)端侧网络权限/网络策略(概率较低,但也要检查)

即使第三方请求在云侧执行,真机到云对象/云函数的调用本身仍需要网络

  • module.json5 是否申请了 ohos.permission.INTERNET
  • 真机是否有网络、代理/VPN 是否影响访问云服务域名

你在云端把完整的日志 打印出来看看 看看到底接到的参数是什么 这个只能一步一步排查

到云端测试一下看看结果和日志,

真机测试云对象和云函数无数据,常见原因:1. AGC云开发服务未开通或未正确配置;2. 云函数/对象未部署到云端(需在DevEco Studio中执行部署);3. 真机网络未连接或未授权(如未登录华为账号);4. 请求参数或返回数据格式不匹配。请检查对应日志确认具体错误码。

真机测试无法获取数据通常是由于网络权限或请求地址问题。请按以下步骤排查:

  1. 检查网络权限
    在真机运行,必须在 module.json5 中显式申请 ohos.permission.INTERNET 权限:

    "requestPermissions": [
       { "name": "ohos.permission.INTERNET" }
    ]
    
  2. 确认请求地址
    云函数/云对象部署后会生成云端正式域名(如 https://xxx.agconnect.com),不要在真机代码中使用 localhost 或模拟器专用的内网地址。
    可在AGC云端函数详情页复制调用地址进行测试。

  3. 检查函数部署状态
    确认云函数或云对象已成功部署至AGC云端,并非仅本地调试。本地调试有效但云端无效,可能是代码未同步上传。

  4. 关闭真机的代理或VPN
    部分真机系统代理可能拦截请求,可暂时关闭或使用移动网络测试。

  5. HTTPS证书处理
    axios默认会验证证书,若云端使用自签名证书会被拦截。可在axios配置中暂时设置 rejectUnauthorized: false,但仅用于调试。

完成以上配置后,重新运行应用即可正常请求云端数据。

回到顶部