Skip to content

调试/调用云函数

为了解决云函数本地调试不方便这个痛点,@ifanrx/faas 内置了云函数 debug 脚本,可通过以下命令进行云函数调试

bash
Usage: npx debug-faas [options]

Options:
  -V, --version               output the version number
  -e, --env-id <BAAS_ENV_ID>  知晓云测试环境的 env id
  --without-env               当知晓云应用没有创建测试环境时使用,请谨慎使用
  --only-invoke               只执行调用云函数步骤,跳过重新构建和部署云函数步骤
  --silent                    屏蔽控制台日志输出
  -s <BAAS_QA_SERVICE>        启用 qa-service
  --qa QA 应用上 debug
  -h, --help                  display help for command
  • 一般情况下,env-id 是必填参数,否则会在正式环境执行云函数
  • 若当前知晓云应用无测试环境,可使用 --without-env,无需传入 <BAAS_ENV_ID>
  • 当云函数内容没有变动,需要通过调整参数多次调用云函数时,可使用 --only-invoke,跳过构建和部署云函数步骤,加快 debug 效率

执行 debug-faas 命令后,会列出当前 function 文件夹下的所有云函数,选择目标云函数并回车即可对该函数进行调试。此处的选择是支持模糊搜索的,当云函数数量较多时可使用搜索功能

debug 的原理是在部署一个加上 debug_ 前缀的同名云函数到知晓云,使用开放 API 执行云函数后并将执行日志输出到终端

通过 @ifanrx/scaffolder 创建的云函数项目已经内置了调试命令,其他项目可将以下命令加到 package.json

json
{
  "script": {
    "debug": "debug-faas --env-id YOUR_ENV_ID",
    "debug:invoke": "pnpm debug --only-invoke"
  }
}

使用 mock 执行云函数

在云函数根目录下创建 mock 文件夹,创建与函数同名的 mock 文件,如 mock/<function>.private.js 或者 mock/<function>.js,使用 cjs 导出请求参数

  • 默认使用 mock/<function>.private.js 或者 mock/<function>.js 作为云函数的执行参数,若无对应文件则不使用参数执行云函数
  • 推荐使用 mock/<function>.private.js,使用优先级会高于 mock/<function>.js,并且不会上传到 repo
  • 支持 Object 和 Array 两种类型的 mock,当 mock 数据类型为 Array 时,将批量执行云函数

举个🌰:

bash
.
├── mock
   ├── hello_world.js
   └── hello_world.private.js
├── src
   ├── function
   └── hello_world.js
js
import {createFaaS, defineProps} from '@ifanrx/faas'
import {number, string} from 'yup'

export default createFaaS(() => {
  const props = defineProps({
    name: string().required(),
    age: number(),
  })

  console.log(props)

  return 'success'
})
js
// 单次调用云函数
export default {
  name: 'John Deng',
  age: 18,
}

// 批量调用云函数
export default [
  {
    name: 'John Deng',
    age: 18,
  },
  {
    name: 'Zhang Wei',
    age: 20,
  },
]

使用 mock event

debug-faas 支持在 mock 文件内自定义 faas event,通常可用于修改调用用户信息或者 event type

在 mock data 内插入 _event 字段即可,插入的 fakeEvent 会与原本的 faas event 合并,作为最终执行云函数 faas event

js
export default {
  name: 'Peter',
  honorific: 'Hello',
  age: 24,
  _event: {
    eventType: 'open_api',
    request: {
      user: {
        id: 123456,
      },
    }
  },
}

// mock event 在修改 user 时,支持省略 request 字段,上面写法等价于:
export default {
  name: 'Peter',
  honorific: 'Hello',
  age: 24,
  _event: {
    eventType: 'open_api',
    user: {
      id: 123456,
    },
  },
}

云函数执行日志查看

调试云函数时,可通过终端查看云函数执行日志,同时会自动将日志保存到根目录 .faas 下,可通过 debug_<function>-<timestamp>.log 找到该日志文件