马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在鸿蒙(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"
- }
- }
复制代码
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。
|