开发者可在云开发界面申请开通云服务并创建云环境,在web界面内使用Node.js语言开发相关接口功能后,供前端相关应用(小程序,小游戏,小组件等)侧使用。
当前云开发功能已白名单开放,首次进入页面时可以点击「申请开通」按钮,等待审核通过后即可进行体验。
在云环境列表界面点击创建环境,填入环境名称与描述,即可创建云环境
当然,我们也可以通过cli工具进行云环境的创建,具体请阅读小红书云CLI工具
我们可以通过cli唤起云函数调试器,在调试器内进行云函数的开发,具体请阅读使用 CLI 10分钟部署云函数
如上图,左侧为对应文件夹,云函数文件和 agent-cloudbase-functions.json 文件,中间为函数开发界面,右侧为云函数调试界面。
在左侧选择对应icon可选择创建文件夹和js文件, 右击相关文件后,可以进行相关新增、删除操作。
选中对应文件夹后,选择新建文件,填入js文件名称和函数描述后,可在对应文件夹下新建js文件。
注意:相同目录下不支持js文件和文件夹重名。
云函数项目需要在根目录配置
在文本编辑器界面开发云函数业务逻辑功能,目前支持 CommonJS 规范。右侧可对当前云函数进行调试,如下图。
调试具体功能可见:调试器使用指南
event和context 功能具体可见:云函数服务端API
在对云函数代码进行充分调试后,可选择发布代码,如下图,点击发布后会跳转至发布页面,调试器界面支持查看相关日志信息,进行发布。
发布部署界面:
在部署完成后可通过 callContainer 方式调用
具体可阅读云函数客户端API
目前云函数服务支持通过 callContainer 方式调用,具体调用方式如下:
在小程序开发者工具内采用 callContainer 调用,调用路径需要与
const cloud = xhs.createCloud({
serviceID: 'your-service-id' // 云环境ID
});
cloud.callContainer({
path: '/user/profile', // 对应 agent-cloudbase-functions.json 中的 triggerPath
init: {
method: 'POST',
header: {
'content-type': 'application/json',
},
body: {
userId: 'u10001'
},
timeout: 60000, //ms
},
success: ({statusCode, header, data}) => {
console.log('调用成功', JSON.parse(data));
},
fail: (err) => {
console.error('调用失败', err);
},
complete: () => {
console.log('调用完成');
}
})
callContainer 调用时路径必须与
例如,如果配置文件中配置了:
{
"functionsRoot": "./src",
"functions": [
{
"name": "userProfile",
"directory": "./user",
"source": "index.js",
"triggerPath": "/user/profile"
}
]
}
则调用时
云函数必须按照配置文件中
// src/user/index.js
exports.userProfile = async function userProfile(event, context) {
const payload = event?.params || {};
const userId = payload.userId;
return {
ok: true,
code: 0,
message: "SUCCESS",
data: {
userId: userId
}
};
};
注意:函数名必须与配置文件中
按照 CommonJS 语法可在其他文件中导出功能函数,供云函数内部调用使用:
// utils/helper.js
exports.formatDate = function(date) {
return new Date(date).toISOString();
};
// src/user/index.js
const { formatDate } = require('../../utils/helper');
exports.userProfile = async function userProfile(event, context) {
const formattedDate = formatDate(new Date());
return {
ok: true,
date: formattedDate
};
};
注意:功能函数不会被直接调用,只能被云函数内部引用使用。如果需要在线上直接调用,需要在
开发完云函数功能后,点击发布,进入云函数发布页面。
选择对应文件和填入发布备注,进行发布。
调试时的调用结果与线上调用保持一致。
我们也可以在云开发控制台点击「查看详情」查看云环境的相关信息
云函数底层运行时多实例的,且会根据请求量实时动态扩缩容,无法保证每一次请求都访问到同一个实例中。因此,应该尽量避免使用全局变量来保存值,因为这将导致不符合预期的结果。
例如:
// Using global variables can lead to unexpected results
let someGlobalVar = 0;
exports.myFunction = async function myFunction(event, context) {
// The original value of `someGlobalVar` is unpredictable
someGlobalVar += 1;
// An unexpected return value
return {
someGlobalVar,
};
}
切记不要写死循环等高危代码,可能会导致后续调试功能不可用。
目前线上调用的默认超时时间为60s, 调试时默认超时时间是10s,因此建议不要写执行时间超过10s的异步代码,如下:
针对开发者代码执行出错,系统会默认返回code 为-1 及对应错误信息,对应HTTP 状态码为500,HTTP状态码不可修改。
对应错误也会在日志平台打印。
对于系统错误,例如针对开发者输入的path 找不到对应执行的云函数,也会抛出对应错误code和错误内容,如下:
若返回为一个非法对象,则系统会默认抛出相关错误,如下:
线上调用路径是与