# 一、关于云开发介绍
云开发与serverless的区别
Serverless Framework是无服务器应用框架,提供将云函数SCF、API网关、对象存储COS、云数据库DB等资源组合的业务框架,开发者可以直接基于框架编写业务逻辑,而无需关注底层资源的配置和管理。- 云开发(
Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为开发者提供高可用、自动弹性扩缩的后端云服务,包含计算、存储、托管等serverless化能力,可用于云端一体化开发多种端应用(小程序、公众号、Web应用、Flutter客户端等),帮助开发者统一构建和管理后端服务和云资源,避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。 - 二者最大的区别是:给开发者使用的平台支持不一样,云开发支持web端、QQ、微信小程序级静态网站托管等这些平台服务。
# 二、使用云开发创建一个nestjs项目
在产品中选择云开发产品

创建一个项目, 这里要选择好区域,下次创建了项目,区域不一样,可能项目就看不到

# 三、使用脚手架的方式创建
# 3.1 安装
全局安装脚手架包官方地址
npm i -g @cloudbase/cli
为了简化输入,cloudbase 命令可以简写成 tcb
测试安装是否成功
tcb -v
查看命令
tcb -h
# 3.2 登录
# CloudBase CLI 会自动打开云开发控制台获取授权,您需要点击同意授权按钮允许 CloudBase CLI 获取授权。如您没有登录,您需要登录后才能进行此操作。
tcb login
也可以使用下面的方式通过 API 秘钥直接登录,避免交互式输入
tcb login --apiKeyId xxx --apiKey xxx
# 3.3 创建项目
本地创建项目
tcb new [options] [appName] [templateUri]
# 比如
tcb new nest-cloundbase nest-starter
云开发项目是和云开发环境资源关联的实体,云开发项目聚合了云函数、数据库、文件存储等服务,您可以在云开发项目中编写函数,存储文件,并通过 CloudBase 快速的操作您的云函数、文件存储、数据库等资源。
云开发项目文件结构:
.
├── .gitignore
├── functions // 云函数目录
│ └── node-app
│ └── index.js
└── cloudbaserc.json // 项目配置文件
选择自己已经创建的环境,如果没有就 创建新环境,这时候会打开浏览器

本地打开项目并且安装依赖包
npm install
npm run dev
部署到线上
# 调用 tcb framework deploy
npm run deploy

部署完成后可以使用 tcb fn list 命令查看已经部署完成的函数列表

# 3.4 环境
查看所有环境
tcb env list

安全域名
当您需要在网页应用中使用云开发的身份验证服务时,您需要将您的网站的域名(发起请求的页面的域名)加入安全域名名单中。安全域名是云开发服务认可的用户请求来源域名,所有来自非安全域名名单中的请求都不会被响应。
使用下面的命令查看所有配置的安全域名
tcb env domain list

新增安全域名
# 添加一个域名
tcb env domain create www.xxx.com
# 添加多个域名
tcb env domain create www.domain1.com/www.domain2.com/www.domain3.com
删除安全域名
tcb env domain delete

登录方式
当您需要使用云开发的身份验证服务时,您需要配置您想使用的登录方式。目前云开发支持自定义登录、微信公众平台、微信开放平台登录等多种登录方式。
# 您可以使用下面的命令列出环境配置的登录方式列表,查看环境配置的登录方式,以及相关的状态。
tcb env login list

您可以使用下面的命令新建登录方式:
tcb env login create
您需要选择配置的平台,登录方式状态,以及对应的 AppId 和 AppSecret,登录方式请选择启用。在添加方式时不会校验 AppId 和 AppSecret 的有效性,只有在请求时,AppId 和 AppSecret 才会被校验,所以请确保您添加的 AppId 和 AppSecret 是有效的。

修改登录方式
您也可以使用
tcb env login update修改已经配置的登录方式,如切换启用状态,修改 AppId 和 AppSecret。

# 动态变量
在
cloudbaserc.json中声明"version": "2.0"即可启用新的特性,新版配置文件只支持 JSON 格式
// 动态变量特性允许在 `cloudbaserc.json` 配置文件中使用动态变量,从环境变量或其他数据源获取动态的数据。使用 `{{}}` 包围的值定义为动态变量,可以引用数据源中的值。如下所示
{
"version": "2.0",
"envId": "envId",
"functionRoot": "./functions",
"functions": [
{
"name": "{{variable}}"
}
]
}
# 环境变量
CloudBase 支持使用 .env 类型文件作为主要数据源,使用不同的后缀区分不同的阶段、场景,如 .env.development 可以表示开发阶段的配置,.env.production 可以表示生产环境的配置
当指定
--mode [mode]时,会再加载.env.[mode]文件,并按照如下的顺序合并覆盖同名变量:.env.[mode] > .env.local > .env即.env.[mode]中的同名变量会覆盖.env.local和.env文件中的同名变量
当使用
tcb framework deploy --mode test命令时,会自动加载.env,.env.local以及.env.test等三个文件中的环境变量合并使用。
我们建议你将秘钥等私密配置放在 .env.local 文件中,并将 .env.local 加入 .gitignore 配置中
如 .env.local 文件中存在以下变量
DB_HOST = localhost
DB_USER = root
DB_PASSWORD = s1mpl3
则可以在配置文件中使用
{
"version": "2.0",
"envId": "xxx",
"functionRoot": "./functions",
"functions": [
{
"name": "test",
"envVariables": {
"PASSWORD": "{{env.DB_PASSWORD}}"
}
}
]
}
# 3.5 云函数操作
# 函数配置cloudbaserc.json
参考配置
// https://docs.cloudbase.net/cli/functions/configs
// https://docs.cloudbase.net/cli-v1/functions/configs
{
// version 表示当前配置文件的版本,目前支持的版本号有:"2.0"。当 version 字段不存在时,默认当前配置文件为 "1.0" 版本。
"version": "",
// 关联环境 ID
"envId": "dev-xxxx",
"functionRoot": "./functions", // 云函数函数代码存放的文件夹路径,相对于根目录的路径。
// region 指定了当前环境的地域信息,上海地域的环境可以不填,其他地域的环境则必须填写。
"region": "",
// 函数配置项组成的数组
"functions": [
{
// functions 文件夹下函数文件夹的名称,即函数名
"name": "app",
// 超时时间,单位:秒 S
"timeout": 5,
// 环境变量
"envVariables": {
"key": "value"
},
// 私有网络配置,如果不使用私有网络,可不配置
"vpc": {
// vpc id
"vpcId": "vpc-xxx",
// 子网 id
"subnetId": "subnet-xxx"
},
// 运行时,目前可选运行包含:Nodejs8.9, Nodejs10.15, Php7, Java8
// 此参数可以省略,默认为 Nodejs10.15
"runtime": "Nodejs10.15",
// 是否云端安装依赖,仅支持 Node.js 项目
"installDependency": true,
// 函数触发器,说明见文档: https://cloud.tencent.com/document/product/876/32314
"triggers": [
{
// name: 触发器的名字
"name": "myTrigger",
// type: 触发器类型,目前仅支持 timer (即定时触发器)
"type": "timer",
// config: 触发器配置,在定时触发器下,config 格式为 cron 表达式
"config": "0 0 2 1 * * *"
}
],
// 函数处理入口,Node.js 和 PHP 项目可以省略,默认值为 index.main
// 因 Java 的 handler 配置较为特殊,所以当运行时为 Java 时,handler 不能省略
// 如:package.Class::mainHandler
"handler": "index.main",
// functions:invoke 本地触发云函数时的调用参数
"params": {},
// 部署/更新云函数时忽略的文件
"ignore": [
// 忽略 markdown 文件
"*.md",
// 忽略 node_modules 文件夹
"node_modules",
"node_modules/**/*"
]
}
]
}
下面为目前所有支持的配置项
- 注:
runtime默认为Nodejs10.15,使用 Node.js 运行时可不填,使用 Php 和 Java 则必填。 - 启用代码加密后,将无法在小程序 IDE、腾讯云控制台中查看云函数的代码和信息
CloudFunctionTrigger
| 名称 | 是否必填 | 类型 | 描述 |
|---|---|---|---|
| name | 是 | String | 触发器名称 |
| type | 是 | String | 触发器类型,可选值:timer |
| config | 是 | String | 触发器配置,在定时触发器下,config 格式为 cron 表达式 |
VPC
| 名称 | 是否必填 | 类型 | 描述 |
|---|---|---|---|
| vpcId | 是 | String | VPC Id |
| subnetId | 是 | String | VPC 子网 Id |
更新函数运行时配置
# 部署
全部参数
默认选项
云函数默认配置:



- 删除函数





























































































