全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网

事件处理函数

更新时间:2017-06-30 06:46:06

在创建函数时,您需要指定一个事件处理函数(event handler function),以供函数计算服务执行代码时调用。Node.js 事件处理函数签名为:

  1. exports.myHandler = function(event, context, callback) {
  2. ...
  3. // Use callback() to return information to the caller.
  4. }

myHandler 是函数计算调用的函数的名称。您需要导出此项,使其对函数计算可见。 假设您将此代码保存为 helloworld.js。那么 helloworld.myHandler 是事件处理函数。更多信息请参阅创建函数

  • event:事件数据,类型为 Buffer 对象。
  • context:当前函数的运行时信息,类型为 Context 对象。
  • callback:通知函数计算系统函数执行完毕,并将信息返回给调用方。

函数示例:

  1. exports.myHandler = function(event, context, callback) {
  2. // 假设调用函数时,传入的event是一个json字符串
  3. var eventObj = JSON.parse(event.toString());
  4. console.log("value1 = " + eventObj.key1);
  5. console.log("value2 = " + eventObj.key2);
  6. // callback第一个参数是Error类型,null表示函数成功执行
  7. callback(null, "some success message");
  8. // or
  9. // callback("some error type");
  10. }

此示例有一个 Node.js 函数,该函数同时也是事件处理函数。在该函数中,首先传入的event被转化成一个JSON object。console.log() 语句会将一些传入的事件数据记录到阿里云日志服务中。当调用callback时,函数退出,并将结果“some success message”返回。

event的格式说明

当一个函数被调用时,函数计算服务将InvokeFunction的Body透传给事件处理函数,不对Event的格式做任何要求,您可以根据自己的业务需求选择不同的格式,如JSON,XML,Image,Video等。事件处理函数以何种方式解析和使用Event是完全由开发者控制的。

如果您使用了OSS触发器,那这个Event是JSON格式的,下面是一个示例:

  1. {
  2. "events": [
  3. {
  4. "eventName": "ObjectCreated:PutObject",
  5. "eventSource": "acs:oss",
  6. "eventTime": "2017-04-21T12:46:37.000Z",
  7. "eventVersion": "1.0",
  8. "oss": {
  9. "bucket": {
  10. "arn": "acs:oss:cn-shanghai:123456789:bucketname",
  11. "name": "testbucket",
  12. "ownerIdentity": "123456789",
  13. "virtualBucket": ""
  14. },
  15. "object": {
  16. "deltaSize": 122539,
  17. "eTag": "688A7BF4F233DC9C88A80BF985AB7329",
  18. "key": "image/a.jpg",
  19. "size": 122539
  20. },
  21. "ossSchemaVersion": "1.0",
  22. "ruleId": "9adac8e253828f4f7c0466d941fa3db81161e853"
  23. },
  24. "region": "cn-shanghai",
  25. "requestParameters": {
  26. "sourceIPAddress": "140.205.128.221"
  27. },
  28. "responseElements": {
  29. "requestId": "58F9FF2D3DF792092E12044C"
  30. },
  31. "userIdentity": {
  32. "principalId": "123456789"
  33. }
  34. }
  35. ]
  36. }

callback参数使用说明

您通过callback参数将函数执行结果返回给调用方。callback函数签名为:

  1. callback(Error error, Object result)

当callback调用后,函数计算系统会终止函数。其中,

  • error:可选参数,通知系统函数执行失败并将错误信息返回给调用方。
  • result:可选参数,将函数成功执行的结果返回给调用方。当用户传入“error”参数时,该参数将被忽略。

callback使用示例

  1. callback(); // 表明函数执行成功,无返回信息。
  2. callback(null); // 表明函数执行成功,无返回信息。
  3. callback(null, null); // 表明函数执行成功,无返回信息。
  4. callback(null, "success"); // 表明函数执行成功,返回“success”信息给调用方。
  5. callback(new Error("error")); // 表明函数执行失败,返回“error”信息给调用方。
  6. callback(new Error("error"), "ignored message") // 表明函数执行失败,第二个参数被忽略。
  7. callback("error"); // 表明函数执行失败。

注意:

  1. 您必须主动调用callback函数,通知函数计算系统函数执行完毕;否则函数的执行不会退出,最后会导致超时错误。
  2. 当您使用callback error参数返回错误信息时,函数计算系统会自动将 error 信息记录到与该函数关联的 SLS 日志库中。如果error信息大于256KB,则系统只会记录前256KB的数据,并在错误消息后显示 “Truncated by FunctionCompute”。关于如何设置函数日志,请参阅相关文档
  3. 如果函数的调用类型是同步调用,错误消息或者结果数据会填充到http body中,并返回给客户端。如果是异步调用,则错误信息或者结果数据不会被返回。
本文导读目录