更新时间:2026-01-07 GMT+08:00

Node.js函数开发指南

函数定义

  • Node.js 6.10函数定义

    Node.js6.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函数。

  • Node.js 8.10及以后版本Runtime函数定义

    Node.js 8.10及以后版本Runtime除了兼容Node.js 6.10 Runtime函数的接口定义规范,还支持使用async的异步形式作为函数入口。

    exports.handler = async (event, context, callback[可选]) => { return data;}

    通过return进行返回。

Node.js的initializer入口介绍

FunctionGraph目前支持以下Node.js运行环境:

  • Node.js 6.10
  • Node.js 8.10
  • Nodejs10.16
  • Nodejs12.13
  • Nodejs14.18
  • Nodejs16.17
  • Nodejs18.15
  • Nodejs20.15

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,那么函数计算会去加载index.js中定义的initializer函数。

  • context参数

    context参数中包含一些函数的运行时信息。例如:request id、临时AccessKey、function meta等。

  • callback参数

    callback参数用于返回调用函数的结果,其签名是function(err, data),与Nodejs中惯用的callback一样,它的第一个参数是error,第二个参数data。如果调用时error不为空,则函数将返回HandledInitializationError,由于屏蔽了初始化函数的返回值,所以data中的数据是无效的,可以参考上文的示例设置为空。

SDK接口

Context类中提供了许多上下文方法供用户使用,其声明和功能如表1所示。

表1 Context类上下文方法说明

方法名

方法说明

getRequestID()

获取请求ID。

getRemainingTimeInMilliSeconds ()

获取函数剩余运行时间。

getAccessKey()

获取用户委托的AccessKey(有效期24小时),使用该方法需要给函数配置委托。

说明:

当前函数工作流已停止维护Runtime SDK 中getAccessKey接口,您将无法使用getAccessKey获取临时AK。

getSecretKey()

获取用户委托的SecretKey(有效期24小时),使用该方法需要给函数配置委托。

说明:

当前函数工作流已停止维护Runtime SDK 中getSecretKey接口,您将无法使用getSecretKey获取临时SK。

getSecurityAccessKey()

获取用户委托的SecurityAccessKey(有效期24小时),使用该方法需要给函数配置委托。

getSecuritySecretKey()

获取用户委托的SecuritySecretKey(有效期24小时),使用该方法需要给函数配置委托。

getSecurityToken()

获取用户委托的SecurityToken(有效期24小时),使用该方法需要给函数配置委托。

getUserData(string key)

通过key获取用户通过环境变量传入的值。

getFunctionName()

获取函数名称。

getRunningTimeInSeconds ()

获取函数超时时间。

getVersion()

获取函数的版本。

getMemorySize()

分配的内存。

getCPUNumber()

获取函数占用的CPU资源。

getProjectID()

获取projectID。

getPackage()

获取函数组。

getToken()

获取用户委托的token(有效期24小时),使用该方法需要给函数配置委托。

getLogger()

获取context提供的logger方法,返回一个日志输出类,通过使用其info方法按“时间-请求ID-输出内容”的格式输出日志。

如调用info方法输出日志:

logg = context.getLogger()

logg.info("hello")

getToken()、getAccessKey()和getSecretKey()方法返回的内容包含敏感信息,请谨慎使用,避免造成用户敏感信息的泄露。

执行结果

执行结果由3部分组成:函数返回、执行摘要和日志。

表2 执行结果说明

参数项

执行成功

执行失败

函数返回

返回函数中定义的返回信息。

返回包含错误信息和错误类型的JSON文件。格式如下:

{
    "errorMessage": "", 
    "errorType":"", 
}

errorMessage:Runtime返回的错误信息

errorType:错误类型

执行摘要

显示请求ID、配置内存、执行时长、实际使用内存和收费时长。

显示请求ID、配置内存、执行时长、实际使用内存和收费时长。

日志

打印函数日志,最多显示4KB的日志。

打印报错信息,最多显示4KB的日志。