Node.js
更新时间:2024-07-05
目前CFC支持的Node.js开发语言包括如下版本:
- Node.js 16.19.1
- Node.js 14.21.3
- Node.js 12.2
- Node.js 10.15
- Node.js 8.5(已下线,目前存量Node.js 8.5函数仍可运行,但无法创建该运行时的新CFC函数)
函数代码
一个简单的Node.js函数示例代码如下所示:
exports.handler = (event, context, callback) => {
callback(null, "Hello world!");
};
执行函数
在创建CFC函数时,需要指定处理程序以让CFC能够找到入口函数。 对于Node.js函数, 处理程序为您函数中的"module-name.export"值,例如,填写"index.handler"则表示调用的是index.js中的export.handler函数。
入参
Node.js函数入参包括event, context和callback,其中callback是可选参数
- event参数: 您调用本函数时传入的事件数据,其数据类型是一个object
- context参数: CFC向函数提供的运行时信息, 其数据类型是一个object
- callback参数(可选):该参数用于返回信息。
返回信息
Node.js采用异步编程模型,您的函数需要使用callback入参返回信息。callback的语法如下:
callback(Error error, Object result);
其中:
- error(可选参数): 在函数执行内部失败时使用此参数返回错误信息,成功的情况下设置为null。
- result(可选参数): 使用此参数返回函数的执行结果。result可以是任意类型。
- 您的函数在callback被调用后立即返回,重复调用 callback 只接受第一次调用的结果。需要确保所有任务在 callback 调用之前完成,否则有些任务可能不会被运行。例如调用下面的函数,将返回 hello world。
exports.handler = (event, context, callback) => {
callback(null, 'hello world');
callback(null, 'done');
};
该函数的返回结果如下:
- 如果你的函数里未调用callback,则函数执行将会超时。
exports.handler = (event, context, callback) => {
console.log('hello world');
};
该函数示例代码执行结果如下:
注意:CFC函数根据您选择的触发器的不同,函数调用方式也不同,对函数的返回结果的处理方式不同。
- 同步调用(RequestResponse): 使用同步调用时,结果会以序列化的JSON格式返回, 调用方可以根据返回值进行后续处理。
- 异步调用(Event): 异步调用时,调用方法触发函数后立即返回,函数返回值会被丢弃。
异常处理
如上对callback入参的说明,您可以使用callback的第一个参数返回错误,如:
exports.handler = (event, context, callback) => {
callback(new Error('myError'))
};
该函数的返回结果如下:
日志
您可以在程序中使用如下语句来完成日志输出:
- console.log()
使用内置模块
函数计算的Node.js运行环境包含了Node.js标准模块,您可以直接引用这些模块。
使用自定义模块
如果您需要使用自定义模块,则需要将您的自定义模块与代码一起打包上传,您可以通过以下方式进行依赖管理。
使用BSAM-CLI本地开发工具
BSAM_CLI 工具使用说明见链接,您可以使用该工具创建一个Node.js应用,本地编写并调试代码后进行打包上传。
// init命令初始化一个工作目录,指定runtime为nodejs10
$ bsam init --runtime nodejs10
// 若您的函数依赖第三方库,BSAM CLI可帮您自动安装这些依赖
$ bsam local install
// 在本地开发和测试完函数后,可以使用bsam package和bsam deploy命令部署到CFC
$ bsam package
$ bsam deploy
使用Baidu Serverless VSCode 插件
Baidu Serverless VSCode Extension 是百度云 Serverless 产品 CFC 的 VSCode 插件,该插件可以帮您快速创建、管理本地的 CFC 函数,具体使用说明见链接,也能帮助您管理和打包第三方依赖。