鸿蒙系列之一云函数以及云数据库开发入门

148 阅读1分钟
  1. 特点
  • DevEco Studio一套开发工具即可支撑端侧与云侧同时开发,无需搭建服务器;
  • 依托AGC中Serverless云服务开放的接口,端侧开发人员能轻松操作云函数以及云数据库中的数据;
  • 直接接入AGC Serverless云服务,实现免运维,无运维成本或资源浪费。

2.云函数开发步骤

  • 在编译器建立云开发项目

image.png

  • 到这里需要登录agc(云后台),点击箭头处直接登录

image.png

  • 在后台创建项目

image.png

  • 创建项目

image.png

image.png

image.png

image.png

image.png

  • 添加应用

image.png

image.png

  • 开通对应的服务

image.png

  • 新建好的项目包含两部分,一是客户端部分,另外一部分是云服务部分

image.png

  • 建立云函数

image.png

image.png

  • 云函数代码实现
/**
 * 云函数入口 固定格式
 * @param event 接收请求的参数
 * @param context 上下文
 * @param callback 回调,返回执行结果
 * @param logger  日志
 */

let myHandler = async function (event, context, callback, logger) {
  logger.info("aaa"+event);

  // do something here
  let random=Math.random().toFixed(6);
  let res = new context.HTTPResponse({"random": random,"username":JSON.parse(event.body).username,"pwd":"pwdddddd"}, {
    "faas-content-type": "json"
  }, "application/json", "200");

  callback(res);
};

export { myHandler };
  • 上次云函数到服务器后台

image.png

  • 客户端编码实现请求云函数
Button('测试云函数')
  .onClick(async()=>{
    let testFun=await cloud.callFunction({
      name:'qdamatest',
      version: '$latest',
      params:{username:'lufanzheng',pwd:'123'}

    })
    let result=testFun.getValue();
    console.log('aaaa',result.username,typeof result.username)
    AlertDialog.show({message:JSON.stringify(result)})
  })

image.png

  1. 云数据库的基础使用
  • 解说 1:图中1处json文件是给指定表插入数据 2.图中2处json文件是建立数据表

image.png

  • 图中2出user.json代码实现,使用编译器提供的快速模版代码实现

image.png

{
  "fields": [
    {
      "belongPrimaryKey": true,
      "fieldName": "uid",
      "fieldType": "IntAutoIncrement",
      "isNeedEncrypt": false,
      "notNull": true
    },
    {
      "belongPrimaryKey": false,
      "fieldName": "username",
      "fieldType": "String",
      "isNeedEncrypt": false,
      "notNull": false
    },
    {
      "belongPrimaryKey": false,
      "fieldName": "pwd",
      "fieldType": "String",
      "isNeedEncrypt": false,
      "notNull": false
    },
    {
      "belongPrimaryKey": false,
      "fieldName": "age",
      "fieldType": "Integer",
      "isNeedEncrypt": false,
      "notNull": false
    }
  ],
  "indexes": [
    {
      "indexName": "uid",
      "indexList": [
        {
          "fieldName": "uid",
          "sortType": "DESC"
        }
      ]
    }
  ],
  "objectTypeName": "user",
  "permissions": [
    {
      "rights": [
        "Read",
        "Upsert",
        "Delete"
      ],
      "role": "World"
    },
    {
      "rights": [
        "Read",
        "Upsert",
        "Delete"
      ],
      "role": "Authenticated"
    },
    {
      "rights": [
        "Read",
        "Upsert",
        "Delete"
      ],
      "role": "Creator"
    },
    {
      "rights": [
        "Read",
        "Upsert",
        "Delete"
      ],
      "role": "Administrator"
    }
  ]
}
  • 图中1中的代码也使用模版代码实现

image.png

{
  "cloudDBZoneName": "Demo",
  "objectTypeName": "user",
  "objects": [
    {
      "uid": 1,
      "username": "1111",
      "pwd": "1111",
      "age": 10
    },
    {
      "uid": 2,
      "username": "2222",
      "pwd": "2222",
      "age": 20
    }
  ]
}
  • 和云函数一样上次到云后台

  • 在云后台下载对于表的bean模板

image.png

  • 在 EntryAbility中进行初始化

image.png

  • 在页面中实现CRUD
Button('测试云数据库-查询')
  .onClick(async()=>{
    try {
      //创建数据库对象
      let database=cloud.database({
        objectTypeInfo:schema,
        zoneName:"Demo"
      })
      //查询数据 user:表名
      let databaseDate=await database.collection(user)
        .query()
        .equalTo('uid',1)
        .get()
      console.log('aaaa',JSON.stringify(databaseDate));
      Prompt.showToast({message:JSON.stringify(databaseDate)})
    } catch (e) {
      console.log('aaaa',JSON.stringify(e));
    }


  })

Button('测试云数据库-插入数据')
  .onClick(async()=>{
    try {
      //创建数据库对象
      let database=cloud.database({
        objectTypeInfo:schema,
        zoneName:"Demo"
      })
      //插入数据
      let user1=new user()
      user1.setUsername('lufanzheng')
      user1.setPwd('456')
      user1.setAge(3)
      let num=await database.collection(user)
        .upsert(user1)

      Prompt.showToast({message:`添加成功${num}`})
    } catch (e) {
      console.log('aaaa',JSON.stringify(e));
    }


  })

Button('测试云数据库-更新数据')
  .onClick(async()=>{
    try {
      //创建数据库对象
      let database=cloud.database({
        objectTypeInfo:schema,
        zoneName:"Demo"
      })
      //更新数据
      let user1=new user()
      user1.setUid(1)
      user1.setUsername('3333')
      user1.setPwd('3333')
      user1.setAge(3)
      let num=await database.collection(user)
        .upsert(user1)

      Prompt.showToast({message:`更新成功${num}`})
    } catch (e) {
      console.log('aaaa',JSON.stringify(e));
    }


  })

Button('测试云数据库-删除数据')
  .onClick(async()=>{
    try {
      //创建数据库对象
      let database=cloud.database({
        objectTypeInfo:schema,
        zoneName:"Demo"
      })
      //更新数据
      let user1=new user()
      user1.setUid(1)

      let num=await database.collection(user)
        .delete(user1)

      Prompt.showToast({message:`删除成功${num}`})
    } catch (e) {
      console.log('aaaa',JSON.stringify(e));
    }


  })