跳到主要内容

创建一个带有triggers的应用

开始之前

通过本教程可以了解应用开发大致流程,帮助开发者快速上手,开发出具有理想功能的应用。

本文将通过实现一个简单的日志上报应用,通过自定义 function 和事件相关 trigger 实现,在用户新建和删除事项时,捕捉到事项信息,进行请求的过程,展示开发必备的流程和步骤。

开始之前,请确保本地已安装以下环境:

  • Node.js>=16.14.0
  • yarn
  • docker(本地调试使用)

第一步:创建应用

  1. 安装/更新 @giteeteam/apps-cli
npm install -g @giteeteam/apps-cli
npm update -g @giteeteam/apps-cli
  1. 利用脚手架 cli,初始化应用
giteeteam-apps init
  1. 按照指令输入插件名称以及唯一 app_key

  2. 创建完成,主要目录结构如下:

apps_demo:
.
├── README.md # 插件说明文档
├── functions # 开发function的位置
├── manifest.yml # 插件描述文件
├── public
├── src # 插件前端代码
├── tsconfig.json
├── typings.d.ts
├── webpack.config.js
├── package.json
└── yarn.lock

第二步:开发应用功能

1. manifest.yml

  • Manifest 描述应用的配置信息,同时也是串联各个功能模块的导航。详见 manifest
    • app:定义应用基础信息,定义应用版本
    • modules:定义包含应用逻辑的函数,以及应用使用的不同模块。
      • function:定义基础功能函数,定义函数唯一 key。本示例中分别定义两个 function,对应 item created 和 deleted 时触发相应功能。
      • trigger:绑定事件触发,并关联函数 key。本示例中利用应用中心封装好的事件,定义 function 的触发时机。
app:
name: apps_demo
key: apps_demo
version: '0.0.1'
modules:
trigger:
- key: item_trigger_created
events:
- gei:proxima:item:created
function: created-function
- key: item_trigger_deleted
events:
- gei:proxima:item:beforeDelete
function: delete-warning-function
function:
- key: created-function
handler: itemsTrigger.whenCreateItem
- key: delete-warning-function
handler: itemsTrigger.whenDeleteItem

2. 功能开发

  • 在 tsconfig.json 中引入文件
{
"include": ["src/**/*", "typings.d.ts", "functions/*"]
}
  • 开发 whenCreateItem 和 whenDeleteItem 两个功能 function,放置在 functions 目录下 itemsTrigger 文件内,同时通过 import 关键字引入其他二级目录下函数
├── functions
│ ├── itemsFunction
│ │ ├── itemsCreated.ts
│ │ ├── itemsDeleted.ts
│ │ └── sendMessage.ts
│ ├── itemsTrigger.ts
./functions/itemsTrigger.ts
import { afterCreated } from './itemsFunction/itemsCreated';
import { afterDeleted } from './itemsFunction/itemsDeleted';

export const whenCreateItem = async ({ payload }) => {
const { item } = payload;
if (item?.key) {
await afterCreated(item);
return { code: 200 };
}
return { code: 400 };
};

export const whenDeleteItem = async ({ payload }) => {
const { item } = payload;
if (item?.key) {
await afterDeleted(item);
return { code: 200 };
}
return { code: 400 };
};
./functions/itemsFunction/itemsCreated.ts
import { sendMsg } from './sendMessage';

export const afterCreated = async (item: any) => {
// console.log("got created item:", JSON.stringify(item));
await sendMsg(item);
return;
};
./functions/itemsFunction/itemsDeleted.ts
import { sendMsg } from './sendMessage';

export const afterDeleted = async (item: any) => {
// console.log("got deleted item:", JSON.stringify(item));
await sendMsg(item);
return;
};
  • 在对应方法内开发相关功能,例如使用 axios 进行网络请求
./functions/itemsFunction/sendMessage.ts
import { axios } from '@giteeteam/apps-api';
export const sendMsg = async (item: any) => {
// do your job
// exp: send message using axios
console.log('sendMsg:', item.objectId);
await axios({
url: 'http://localhost:1337',
method: 'get',
})
.then(response => {
console.log('got response ', response);
})
.catch(error => {
console.log('got error ', error);
});
};

第三步:打包,发布到线上开发环境

1. 登陆调试环境

使用登录命令(详细参数请参考:Login),登录到调试环境。

giteeteam-apps login

2. 构建应用

构建完成后输出的制品格式是 *.zip

yarn build-app

build-app 命令在 package.json 中已经定义

3. 发布应用(开发环境)

将上一步构建的应用包发布。(详细参数请参考:Deploy

giteeteam-apps deploy xxx.zip

4. 在开发者中心中为租户订阅该应用

http://demo.com/apps/page/application/developer

developer_page

developer_subscription

第四步:本地调试

  1. 确保本地 docker 启动
  2. 使用 tunnel 命令(详细参数请参考:Tunnel)开启本地调试
giteeteam-apps tunnel
  1. 登陆环境,进行新建事项与删除事项操作,观察本地调试结果,调试代码

第五步:线上部署

  1. 打开应用市场

apps_market

  1. 创建应用,上传应用 zip

upload_app

  1. 点击"订阅"

subscribe_app