跳到主要内容

Node.js 适配器

提示

自 v3.1 版本起,@cloudbase/js-sdk已默认集成了 Node.js 适配器,无需额外安装,如果需要进行适配器扩展,可以按下面步骤进行安装使用。

概览

Node.js 适配器是为 Node.js 环境设计的,提供了对云开发服务的访问能力。它允许开发者在 Node.js 应用中使用云开发的功能,如数据库、存储、函数等。

安装

使用 npm 安装 Node.js 适配器:

npm i @cloudbase/adapter-node

快速开始

使用

const cloudbase = require("@cloudbase/js-sdk");
const adapter = require("@cloudbase/adapter-node");

// 使用 Node.js 适配器
cloudbase.useAdapters(adapter);

const app = cloudbase.init({
env: "your-env", // 需替换为实际使用环境 id
});

使用示例

云函数调用示例

// 云函数调用示例
const result = await app.callFunction({
name: "your-function-name",
data: {
key: "value",
},
});

数据库操作示例

// 数据库操作示例
const db = app.database();
// 创建测试集合
const testCollection = db.collection("test_collection");
// 插入测试数据
const insertResult = await testCollection.add({
name: "Node.js 测试",
timestamp: new Date().toISOString(),
});

文件上传示例

// 上传文件示例
const fileName = `test-files/app-upload-${Date.now()}.jpg`;

const fs = require("fs");
const testFilePath = "/your/local/path/XXX.jpg"; // 替换为你的本地文件路径
// 读取文件内容
const fileBuffer = fs.readFileSync(testFilePath);

const uploadResult = await app.uploadFile({
cloudPath: fileName,
filePath: fileBuffer,
onUploadProgress: function (progressEvent) {
console.log("上传进度:", progressEvent);
var percentCompleted = Math.round(
(progressEvent.loaded * 100) / progressEvent.total
);
},
});

扩展适配器

Node.js 适配器导出了核心模块,你可以基于此构建自定义适配器,满足特殊环境或业务需求。

适配器结构说明

适配器通过 genAdapter 函数生成,返回的对象包含以下核心属性:

属性类型说明
reqClassSDKRequestInterfaceHTTP 请求类,负责所有网络请求(GET/POST/上传/下载/流式)
wsClassWebSocketConstructorWebSocket 构造函数
sessionStorageStorageInterface会话存储实现
localStorageStorageInterface本地存储实现
primaryStorageStorageType默认使用的存储类型
rootobject全局对象引用
getSecretInfofunction获取腾讯云临时密钥信息
nodeToolfunctionNode.js 端工具方法(auth、模板消息等)
captchaOptionsobject验证码处理回调

自定义请求类

通过继承 NodeRequest 类,可以扩展或覆盖请求行为,例如添加自定义请求头、修改签名逻辑、拦截请求/响应等。

const { NodeRequest } = require("@cloudbase/adapter-node");

class CustomRequest extends NodeRequest {
// 覆盖 getReqOptions 以添加自定义请求头
getReqOptions = async (url, options) => {
const reqOptions = await super.getReqOptions(url, options);
reqOptions.headers = {
...reqOptions.headers,
"X-Custom-Header": "my-value",
};
return reqOptions;
};

// 覆盖 fetch 以添加请求/响应拦截
fetch = async (options) => {
console.log("[请求拦截]", options.url);
const result = await super.fetch(options);
console.log("[响应拦截]", result.statusCode);
return result;
};
}

自定义存储实现

默认的内存存储仅在进程生命周期内有效。如需持久化存储(如 Redis、文件系统等),可自行实现 StorageInterface

const customStorage = {
mode: "async", // "sync" 或 "async"
setItem(key, value) {
// 写入你的存储后端
},
getItem(key) {
// 从你的存储后端读取
},
removeItem(key) {
// 从你的存储后端删除
},
clear() {
// 清空存储
},
};

完整自定义适配器示例

const cloudbase = require("@cloudbase/js-sdk");
const nodeAdapter = require("@cloudbase/adapter-node");
const { NodeRequest } = nodeAdapter;

// 1. 自定义请求类
class CustomRequest extends NodeRequest {
getReqOptions = async (url, options) => {
const reqOptions = await super.getReqOptions(url, options);
reqOptions.headers["X-Custom-Header"] = "my-value";
return reqOptions;
};
}

// 2. 自定义存储
const redisStorage = {
mode: "async",
async setItem(key, value) {
/* redis.set(key, value) */
},
async getItem(key) {
/* return redis.get(key) */
},
async removeItem(key) {
/* redis.del(key) */
},
async clear() {
/* redis.flushdb() */
},
};

// 3. 组装自定义适配器
const customAdapter = {
genAdapter(options) {
// 获取默认适配器
const defaultAdapter = nodeAdapter.default.genAdapter(options);
return {
...defaultAdapter,
// 替换请求类
reqClass: CustomRequest,
// 替换存储实现
localStorage: redisStorage,
sessionStorage: redisStorage,
};
},
isMatch: nodeAdapter.default.isMatch,
runtime: "custom-node-adapter",
};

// 4. 使用自定义适配器
cloudbase.useAdapters(customAdapter);
const app = cloudbase.init({
env: "your-env",
});

导出的工具函数

适配器还导出了一些工具函数,可在自定义适配器中复用:

导出项说明
NodeRequestHTTP 请求类,可继承扩展
parseQueryString(search)解析查询字符串为对象,支持重复 key 自动转数组
createWebStreamFromNodeReadableStream(stream)将 Node.js ReadableStream 转换为 Web ReadableStream

类型导出

类型说明
ICreateTicketOpts自定义登录 Ticket 创建选项
IGetUserInfoResult用户信息查询结果
IGetEndUserInfoResult终端用户信息查询结果
IUserInfoQuery用户信息查询请求参数
IContextParam云函数入口 context 参数结构
ICompleteCloudbaseContext云函数运行时完整环境变量类型
ICredentialsInfo自定义登录凭证信息(RSA 私钥)