Node.js函数开发概述
FunctionGraph当前支持以下Node.js运行环境:
- Node.js 6.10
- Node.js 8.10
- Nodejs 10.16
- Nodejs 12.13
- Node.js 14.18
- Node.js 16.17
- Node.js 18.15
- Node.js 20.15
Node.js函数接口定义
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内容需要用户自己定义,如字符串。
Node.js 8.10及以后版本Runtime函数接口定义
Node.js 8.10及以后版本Runtime除了兼容Node.js 6.10 Runtime函数的接口定义规范,还支持使用async的异步形式作为函数入口。通过return进行返回。
exports.handler = async (event, context, callback[可选]) => { return data;}
Node.js函数的函数执行入口参数格式为:[文件名].[函数名],请通过FunctionGraph控制台进行函数执行入口配置。例如创建函数时设置函数执行入口为index.handler,那么FunctionGraph会去加载index.js中定义的handler函数。
Node.js的Initializer入口介绍
关于函数初始化入口Initializer的具体介绍请参考函数初始化入口Initializer。
Node.js的Initializer入口格式为:[文件名].[initializer名]
示例:实现initializer接口时指定的Initializer入口为“index.initializer”,那么函数工作流服务会去加载index.js中定义的initializer函数。
在函数工作流服务中使用Node.js编写initializer逻辑,需要定义一个Node.js函数作为initializer入口,以下为initializer的简单示例。
exports.initializer = function(context, callback) { callback(null, ''); };
- 函数名
exports.initializer需要与实现initializer接口时的Initializer字段相对应。
示例:创建函数时指定的Initializer入口为index.initializer,那么FunctionGraph会去加载index.js中定义的initializer函数。
- context参数
context参数中包含一些函数的运行时信息。例如:request id、临时AccessKey、function meta等。
- callback参数
callback参数用于返回调用函数的结果,其签名是function(err, data),与Nodejs中惯用的callback一样,它的第一个参数是error,第二个参数data。如果调用时error不为空,则函数将返回HandledInitializationError,由于屏蔽了初始化函数的返回值,所以data中的数据是无效的,可以参考上文的示例设置为空。
Node.js Runtime集成的三方件
名称 |
功能 |
版本号 |
---|---|---|
q |
异步方法封装。 |
1.5.1 |
co |
异步流程控制。 |
4.6.0 |
lodash |
常用工具方法库。 |
4.17.10 |
esdk-obs-nodejs |
OBS SDK。 |
2.1.5 |
express |
极简web开发框架。 |
4.16.4 |
fgs-express |
在FunctionGraph和API Gateway之上使用现有的Node.js应用程序框架运行无服务器应用程序和REST API 。提供的示例允许您使用Express框架轻松构建无服务器Web应用程序/服务和RESTful API 。 |
1.0.1 |
request |
简化HTTP调用,支持HTTPS并默认遵循重定向 |
2.88.0 |
SDK接口
Context类中提供了上下文方法供您在函数代码中使用,其声明和功能如表2所示。
方法名 |
方法说明 |
---|---|
getRequestID() |
获取请求ID。 |
getRemainingTimeInMilliSeconds () |
获取函数剩余运行时间。 |
getAccessKey() |
获取用户委托的AccessKey(有效期24小时),使用该方法需要为函数配置委托。 当前函数工作流已停止维护Runtime SDK 中getAccessKey接口,您将无法使用getAccessKey获取临时AK。 |
getSecretKey() |
获取用户委托的SecretKey(有效期24小时),使用该方法需要为函数配置委托。 当前函数工作流已停止维护Runtime SDK 中getSecretKey接口,您将无法使用getSecretKey获取临时SK。 |
getSecurityAccessKey() |
获取用户委托的SecurityAccessKey(有效期24小时),缓存时间为10分钟,即10分钟内再次获取的返回内容相同,使用该方法需要为函数配置委托。 |
getSecuritySecretKey() |
获取用户委托的SecuritySecretKey(有效期24小时),缓存时间为10分钟,即10分钟内再次获取的返回内容相同,使用该方法需要为函数配置委托。 |
getSecurityToken() |
获取用户委托的SecurityToken(有效期24小时),缓存时间为10分钟,即10分钟内再次获取的返回内容相同,使用该方法需要为函数配置委托。 |
getUserData(string key) |
通过key获取用户通过环境变量传入的值。 |
getFunctionName() |
获取函数名称。 |
getRunningTimeInSeconds () |
获取函数超时时间。 |
getVersion() |
获取函数的版本。 |
getMemorySize() |
分配的内存。 |
getCPUNumber() |
获取函数占用的CPU资源。 |
getPackage() |
获取函数组。 |
getToken() |
获取用户委托的Token(有效期24小时),使用该方法需要为函数配置委托。 |
getLogger() |
获取context提供的logger方法,返回一个日志输出类,通过使用其info方法按“时间-请求ID-输出内容”的格式输出日志。 如调用info方法输出日志: logg = context.getLogger() logg.info("hello") |
getAlias() |
获取函数的别名。 |
如图1所示,可在函数工作流控制台代码编辑器中使用context类。
相关文档
- 使用Node.js开发事件函数,请参见开发Node.js事件函数。
- 使用Node.js运行时语言开发HTTP函数,请参见使用Node.js开发HTTP函数。
- 为Node.js函数制作依赖包,请参见为Node.js函数制作依赖包。
- 关于函数开发的更多说明,如函数支持的运行时、函数支持的触发事件、函数工程打包规范以及如何在函数中引入动态链接库,请参见函数开发概述。