Node.js函数开发指南
函数定义

建议使用Node.js 12.13版本。
- Node.js 6.10函数定义
export.handler = function(event, context, callback)
- 入口函数名(handler):入口函数名称, 需和函数执行入口处用户自定义的入口函数名称一致。
- 执行事件(event):函数执行界面由用户输入的执行事件参数, 格式为JSON对象。
- 上下文环境(context):Runtime提供的函数执行上下文,其接口定义在SDK接口说明。
- 回调函数(callback):callback方法完整声明为callback(err, message),用户通过此方法可以返回err和message至前台结果显示页面。具体的err或message内容需要用户自己定义,如字符串。
- 函数执行入口: index.handler
函数执行入口格式为“[文件名].[函数名]”。例如创建函数时设置为index.handler,那么函数计算会去加载index.js中定义的handler函数,如图1所示。
- Node.js 8.10、Node.js 10.16、Node.js 12.13函数定义
Node.js 8.10、Node.js 10.16、Node.js 12.13 Runtime除了兼容Node.js 6.10 Runtime函数的接口定义规范,还支持使用async的异步形式作为函数入口。
exports.handler = async (event, context, callback[可选]) => { return data;}
通过return进行返回。
SDK接口
Context类中提供了许多上下文方法供用户使用,其声明和功能如表1所示。
方法名 |
方法说明 |
---|---|
getRequestID() |
获取请求ID。 |
getRemainingTimeInMilliSeconds () |
获取函数剩余运行时间。 |
getAccessKey() |
获取租户AccessKey,使用该方法需要给函数配置委托。 |
getSecretKey() |
获取租户SecretKey,使用该方法需要给函数配置委托。 |
getUserData(string key) |
通过key获取用户通过环境变量传入的值。 |
getFunctionName() |
获取函数名称。 |
getRunningTimeInSeconds () |
获取函数超时时间。 |
getVersion() |
获取函数的版本。 |
getMemorySize() |
分配的内存。 |
getCPUNumber() |
分配的CPU数。 |
getProjectID() |
获取projectID。 |
getPackage() |
获取函数组。 |
getToken() |
获取token,使用该方法需要给函数配置委托。 |
getLogger() |
获取context提供的logger方法,返回一个日志输出类,通过使用其info方法按“时间-请求ID-输出内容”的格式输出日志。 如调用info方法输出日志: logg = context.getLogger() logg.info("hello") |

getToken()、getAccessKey()和getSecretKey()方法返回的内容包含敏感信息,请谨慎使用,避免造成用户敏感信息的泄露。
开发Node.js函数
开发Node.js函数步骤如下。
- 创建函数工程
- 编写打印helloworld的代码
打开文本编辑器,编写helloworld函数,代码如下,文件命名为helloworld.js,保存文件。
var return_helloworld = function() { console.log('helloworld'); }; module.exports = { print: return_helloworld };
- 定义FunctionGraph函数
打开文本编辑,定义函数,代码如下,文件命名为index.js,保存文件(与helloworld.js保存在同一文件夹下)。
var h = require('./helloworld.js'); exports.handler = function (event, context, callback) { h.print(); callback(null, JSON.stringify(event)); }
- 编写打印helloworld的代码
- 工程打包
函数工程创建以后,可以得到以下目录,选中工程所有文件,打包命名为“fss_examples_nodejs6.10.zip”,如图2所示。
本例函数工程文件保存在“~/Code/”文件夹下,在打包的时候务必进入Code文件夹下选中所有工程文件进行打包,这样做的目是:定义了FunctionGraph函数的index.js是程序执行入口,确保fss_examples_nodejs6.10.zip解压后,index.js文件位于根目录。
- 创建FunctionGraph函数,上传程序包登录FunctionGraph控制台,创建Node.js函数,上传fss_examples_nodejs6.10.zip文件。如图3所示。
- 函数执行入口中的index与定义FunctionGraph函数的文件名保持一致,通过该名称找到FunctionGraph函数所在文件。
- 函数执行入口中的handler为函数名,与index.js文件中的函数名保持一致。
- 函数执行过程为:用户上传fss_examples_nodejs6.10.zip保存在OBS中,触发函数后,解压缩zip文件,通过index匹配到FunctionGraph函数所在文件,通过handler匹配到index.js文件中定义的FunctionGraph函数,找到程序执行入口,执行函数。
- 测试函数
- 创建测试事件。
在函数详情页,单击“请选择测试事件>请配置测试事件”,弹出“配置测试事件”页,输入测试信息如图4所示,单击“保存”。
- 在函数详情页,选择已配置测试事件,单击“测试”。
- 创建测试事件。
- 函数执行
函数执行结果分为三部分,分别为函数返回(由callback返回)、执行摘要、日志输出(由console.log或getLogger()方法获取的日志方法输出),如图5所示。
执行结果
执行结果由3部分组成:函数返回、执行摘要和日志。
参数项 |
执行成功 |
执行失败 |
---|---|---|
函数返回 |
返回函数中定义的返回信息。 |
返回包含错误信息和错误类型的JSON文件。格式如下: { "errorMessage": "", "errorType":"", } errorMessage:Runtime返回的错误信息 errorType:错误类型 |
执行摘要 |
显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 |
显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 |
日志 |
打印函数日志,最多显示4KB的日志。 |
打印报错信息,最多显示4KB的日志。 |
函数执行失败的函数返回示例如下:
{ "errorMessage": "Unexpected identifier (./index.js:31)", "errorType": "SyntaxError" }
函数执行失败的日志示例如下:
2020-07-14 10:29:10.375+08:00 Start invoke request '2a02e0e7-faa8-49aa-be15-d1c4cf0c7069', version: latest 2020-07-14 10:29:10.381+08:00 2a02e0e7-faa8-49aa-be15-d1c4cf0c7069 Unexpected identifier (./index.js:31) ./index.js:31 function_version, ^^^^^^^^^^^^^^^^ SyntaxError: Unexpected identifier 2020-07-14 10:29:10.382+08:00 Finish invoke request '2a02e0e7-faa8-49aa-be15-d1c4cf0c7069'(invoke Failed), duration: 6.632ms, billing duration: 100ms, memory used: 59.777MB
