基于腾讯云开发的云函数模版,支持以下特性:
- 🧱 使用 koa 模拟路由,让单个云函数就能支持多样的业务
- 🔥 使用 typescript 进行开发
- 📦 支持接入 mysql 数据库
- 😄 支持本地开发和热更新。并与产线无缝对接
- 🚀 只需 20s,一行命令即可部署至腾讯云开发产线环境
- 🔐 产线代码加密,交付给甲方无需担心源码泄漏
- 等等
需要注意的是,该云函数模版只是为 web server 提供了基本范式。如果希望服务于微信小程序,并在微信开发者工具中调试,请联系作者获取 blitz-wxapp
模板
scripts
: 部署用的脚本,模板使用者无需关注~middlewares
: 存放了基础的中间件。业务中间件也可以存放至此处routes
: 业务路由,业务开发主要在这里面进行。参考常用 restful/mvc 标准即可utils
: 一些基础的函数库。业务常用函数也可以放于此处.env.*
: 环境变量配置文件。通过dotenv
读取app.ts
: Koa 应用启动文件server.ts
: 本地开发的入口文件index.js/ts
: 产线运行的入口文件cloudbaserc.json
: 部署至腾讯云开发云函数的配置文件
个人建议,开发/测试连接的云开发环境和产线的隔离
- 建议开通 按量计费环境 资源配额较高且有免费环境
- 复制
.env.example
为.env.dev
和.env.prod
文件,并根据注释配置环境变量 - 复制
cloudbaserc.example.json
为cloudbaserc.json
,并根据需要配置云开发变量(一般来说拷贝过来就能用了) - 执行
yarn
安装依赖
TCB_SECRET_ID
和TCB_SECRET_KEY
是为了让用户能够在本地访问云开发资源(产线就不需要配置了)- 可以在 访问管理->用户列表 中获取
- 新建用户时,关联上 云开发 关键词的策略名
- 创建完成后,点开用户详情->API 密钥即可获取
TCB_VPC_ID
和TCB_VPC_SUBNET_ID
主要服务于使用腾讯云 MYSQL 的开发者。可以将云函数和云 Mysql 配置在同一私有网络下,实现内网访问- 若不需要,这两个环境变量不需要填
- 若不需要,修改下 cloudbaserc.json,删除
vpc
这个配置即可
- 执行
yarn dev
开始开发,监听7001
端口 - 可选:修改
server.ts
文件可自定义端口号
- 确保已配置
.env.prod
文件 - 确保已安装 cloudbase-cli
- 使用
tcb login
登录相应的腾讯云账号(若已登录,可以忽略)- 建议先在浏览器登录腾讯云,cli 登录时会自动通过浏览器腾讯云进行 oauth
- 执行
yarn deploy
命令,将云函数部署至产线(默认即全量发布)
- 登录 腾讯云云开发控制台 对应云环境
- 进入当前云函数查看【日志】和【监控】
- 可以根据前端响应头里的
x-tencent-scf-request-id
属性,在日志中定位对应请求,查看输出的结果
- 注意:修改环境变量文件后,需要重新启动
- 注意:目前仅支持通过 node-sdk 接入腾讯云云开发。若要配合小程序使用,请咨询使用
blitz-wxapp
协助开发 - 建议:通过自定义状态码,覆盖所有业务异常情况。其余异常都通过状态码 500 表示。同样由于前端发起的云函数请求,因此不存在需要判断 HTTP 状态码的情况
- 建议:不要使用
export default
而是直接使用export
导出模块 - 可选:支持接入关系型数据库,详见 代码 以及 serverless-mysql
- 开发环境下,前端直接通过常用的
axios | fetch | umi-request
向本地 web-server 发起请求 - 产线环境下(部署为云函数后),前端直接通过 jssdk 提供的
callFunction
发起请求。- ❕ 需要注意的是,为了兼容 使用 HTTP 访问云函数,该模板要求云函数入参匹配 集成请求。下面是前端发起云函数请求的基本范式
const body = typeof data === "object" ? JSON.stringify(data) : data;
const resp = await callFunction({
parse: true,
name: "function-name",
data: {
body: data,
httpMethod: "POST",
path: `/path/to/service`,
headers: {
...(headers || {}),
// 这里还可以放一些鉴权信息
},
},
});
- 所有新增和更新操作,都需要先验证输入参数是否匹配、是否正确,是否可以考虑使用 zod 同时完成定义和检查