本文介绍Node.js事件请求处理程序的结构特点和示例。

Event Handler签名

一个简单的Event Handler签名定义如下。

exports.handler = function(event, context, callback) {
  callback(null, 'hello world');
};

Event Handler的示例解析如下:

  • handler:方法名称。与函数计算控制台配置的请求处理程序(函数入口)相对应。例如,为FC函数配置的请求处理程序(函数入口)index.handler,那么函数计算会去加载index.js中定义的handler函数,并从handler函数开始执行。
  • event:您调用函数时传入的参数。在Node.js运行环境中,取值类型为Buffer。
  • context:为您的FC函数调用提供在调用时的运行上下文信息。
  • callback:回调函数,用于标识函数执行结束并返回结果。其签名是function(error, data)errornull时表示正常返回,返回内容为data。否则为异常返回,错误信息为error
    说明 根据data的类型,函数计算会对返回结果做相应转换。
    • Buffer类型:不转换,原样返回。
    • Object类型:转换为JSON格式后返回。
    • 其他类型:转换为字符串后返回。

您也可以使用异步函数签名,具体示例如下所示。

exports.handler = async function(event, context, callback) {
  callback(null, 'hello world');
};

示例一:解析JSON格式参数

示例代码

当你传入JSON格式参数时,函数计算会透传参数内容,需要您在代码中自行解析。下面是解析JSON格式事件的代码示例。

exports.handler = function(event, context, callback) {
  var eventObj = JSON.parse(event.toString());
  callback(null, eventObj['key']);
};

前提条件

创建函数

操作步骤

  1. 登录函数计算控制台,在左侧导航栏,单击服务及函数
  2. 在顶部菜单栏,选择地域,然后在服务列表页面,单击目标服务。
  3. 函数管理页面,单击目标函数名称,然后在函数详情页面,单击函数代码页签。
  4. 函数代码页签,在代码编辑器中输入上述示例代码,然后单击部署代码
    说明 上述示例代码中函数的请求处理程序是index.js中的handler方法。如果您的函数的请求处理程序配置不同,请获取对应的文件和方法进行更新。
  5. 函数代码页签,单击测试函数右侧的down图标,从下拉列表中选择配置测试参数,输入如下示例测试参数,然后单击确定
    {
      "key": "value"
    }
  6. 单击测试函数
    函数执行成功后,查看返回结果,您可以看到返回结果为value

示例二:通过临时密钥安全读写OSS的资源

示例代码

您可以使用函数计算为您提供的临时密钥访问对象存储OSS,代码示例如下所示。

var OSSClient = require('ali-oss');

exports.handler = function (event, context, callback) {
    console.log(event.toString());

    var ossClient = new OSSClient({
        accessKeyId: context.credentials.accessKeyId,
        accessKeySecret: context.credentials.accessKeySecret,
        stsToken: context.credentials.securityToken,
        region: 'oss-cn-shenzhen',
        bucket: 'my-bucket',
    });

    ossClient.put('myObj', Buffer.from('hello, fc', "utf-8")).then(function (res) {
        callback(null, 'put object');
    }).catch(function (err) {
        callback(err);
    });
};
示例代码解析如下:
  • context.credentials:表示从context参数中获取临时密钥,避免在代码中硬编码密码等敏感信息。
  • myObj:OSS对象名称。
  • Buffer.from('hello, fc', "utf-8"):上传的对象的内容。
  • callback(null, 'put object'):上传成功正常返回put object
  • callback(err):上传失败时返回err

前提条件

操作步骤

  1. 登录函数计算控制台,在左侧导航栏,单击服务及函数
  2. 在顶部菜单栏,选择地域,然后在服务列表页面,单击目标服务。
  3. 函数管理页面,单击目标函数名称,然后在函数详情页面,单击函数代码页签。
  4. 函数代码页签,在代码编辑器中输入上述示例代码,然后单击部署代码
    说明 上述示例代码中函数的请求处理程序是index.js中的handler方法。如果您的函数的请求处理程序配置不同,请获取对应的文件和方法进行更新。
  5. 单击测试函数
    函数执行成功后,查看返回结果,您可以看到返回结果为put object

示例三:调用外部命令

您的Node.js程序也可以创建fork进程,调用外部命令。例如,您可以使用child_process模块调用Linux的ls -l命令,输出当前目录下的文件列表。代码示例如下:

'use strict';

var exec = require('child_process').exec;
exports.handler = (event, context, callback) => {
  console.log('start to execute a command');
  exec("ls -l", function(error, stdout, stderr){
    callback(null, stdout);
});
}