调用云开发资源
在云函数中可以便捷地调用云开发的各种资源,包括数据库、云存储、其他云函数等。Node.js 云函数使用 @cloudbase/node-sdk,其他语言使用 HTTP API。
Node.js 云函数
Node.js 云函数使用 @cloudbase/node-sdk 调用云开发资源,在云函数环境中无需配置鉴权参数,可直接调用。
安装 SDK
npm install @cloudbase/node-sdk --save
初始化
在云函数中初始化 SDK,无需配置 secretId、secretKey 等鉴权参数:
const tcb = require('@cloudbase/node-sdk')
const app = tcb.init({
env: tcb.SYMBOL_DEFAULT_ENV // 使用当前云函数默认环境 ID
})
调用数据库示例
- 查询数据
- 新增数据
- 更新数据
- 删除数据
const tcb = require('@cloudbase/node-sdk')
const app = tcb.init({
env: tcb.SYMBOL_DEFAULT_ENV
})
exports.main = async (event, context) => {
const db = app.database()
// 查询单条记录
const user = await db.collection('users')
.doc('user-id-123')
.get()
// 查询多条记录
const todos = await db.collection('todos')
.where({
completed: false
})
.orderBy('createdAt', 'desc')
.limit(10)
.get()
return {
user: user.data,
todos: todos.data
}
}
const tcb = require('@cloudbase/node-sdk')
const app = tcb.init({
env: tcb.SYMBOL_DEFAULT_ENV
})
exports.main = async (event, context) => {
const db = app.database()
const result = await db.collection('todos').add({
title: '学习云开发',
completed: false,
createdAt: new Date()
})
return {
id: result.id,
message: '新增成功'
}
}
const tcb = require('@cloudbase/node-sdk')
const app = tcb.init({
env: tcb.SYMBOL_DEFAULT_ENV
})
exports.main = async (event, context) => {
const db = app.database()
// 更新单条记录
await db.collection('todos')
.doc('todo-id-123')
.update({
completed: true,
updatedAt: new Date()
})
// 批量更新
await db.collection('todos')
.where({
completed: false
})
.update({
priority: 'high'
})
return { message: '更新成功' }
}
const tcb = require('@cloudbase/node-sdk')
const app = tcb.init({
env: tcb.SYMBOL_DEFAULT_ENV
})
exports.main = async (event, context) => {
const db = app.database()
// 删除单条记录
await db.collection('todos')
.doc('todo-id-123')
.remove()
// 批量删除
await db.collection('todos')
.where({
completed: true
})
.remove()
return { message: '删除成功' }
}
其他语言云函数
其他语言(Python、Java、Go、PHP 等)的云函数需要使用「HTTP API」调用云开发资源。
HTTP API 提供了通过 HTTP 协议访问云开发平台功能的接口,详细接口文档请参考 HTTP API 文档
示例:Python 云函数调用 MySQL 数据库
获取 access_token 请参考 获取AccessToken
- 查询数据
- 条件查询
- 排序与分页
import requests
import os
def main_handler(event, context):
# 获取环境变量
env_id = os.environ.get('TCB_ENV')
# 查询 film 表中导演为 Christopher Nolan 的电影
url = f'https://{env_id}.api.tcloudbasegateway.com/v1/rdb/rest/film'
params = {
'director': 'eq.Christopher Nolan',
'select': 'title,director,release_year,duration'
}
headers = {
'Authorization': 'Bearer <access_token>',
'Content-Type': 'application/json'
}
response = requests.get(url, params=params, headers=headers)
if response.status_code == 200:
return {
'code': 0,
'data': response.json()
}
else:
return {
'code': -1,
'message': response.text
}
import requests
import os
def main_handler(event, context):
env_id = os.environ.get('TCB_ENV')
# 查询 2000 年后上映的电影,时长不超过 120 分钟
url = f'https://{env_id}.api.tcloudbasegateway.com/v1/rdb/rest/film'
params = {
'release_year': 'gte.2000',
'duration': 'lt.120',
'select': 'title,director,release_year,duration'
}
headers = {
'Authorization': 'Bearer <access_token>'
}
response = requests.get(url, params=params, headers=headers)
return response.json()
import requests
import os
def main_handler(event, context):
env_id = os.environ.get('TCB_ENV')
# 查询播放时长最长的前 3 部电影
url = f'https://{env_id}.api.tcloudbasegateway.com/v1/rdb/rest/film'
params = {
'order': 'duration.desc',
'limit': 3,
'select': 'title,director,duration,release_year'
}
headers = {
'Authorization': 'Bearer <access_token>',
'Prefer': 'count=exact' # 返回总数
}
response = requests.get(url, params=params, headers=headers)
# 从响应头获取总数
content_range = response.headers.get('content-range', '')
total = content_range.split('/')[-1] if content_range else 0
return {
'data': response.json(),
'total': total
}
💡 提示:
- 在云函数环境中,可通过环境变量
TCB_ENV获取环境 ID,TCB_CONTEXT_KEYS获取访问令牌- 对于 Python、Java、Go 等语言,建议使用 HTTP API 的方式调用云开发资源
- 详细的操作符、查询参数请查阅 MySQL 数据库查询文档
- 完整的 HTTP API 接口请参考 HTTP API 文档