文档首页> > 开发指南> 如何开发函数> Node.js函数开发指南

Node.js函数开发指南

分享
更新时间: 2019/07/02 19:47

函数定义

  • 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函数,如图1所示。

      图1 Node.js函数执行入口
  • Node.js 8.10函数定义

    Nodejs 8.10 Runtime除了兼容Node.js6.10 Runctime函数的接口定义规范,还支持使用async的异步形式作为函数入口。

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

    通过return进行返回。

SDK接口

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

表1 Context类上下文方法说明

方法名

方法说明

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-输出内容”的格式输出日志。如logg = context.getLogger()获取一个logg对象,调用info方法输出日志:logg.info("hello")。

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

开发Node.js函数

开发Node.js函数步骤如下。

  1. 创建函数工程

    1. 编写打印helloworld的代码

      打开文本编辑器,编写helloworld函数,代码如下,文件命名为helloworld.js,保存文件。

      var return_helloworld = function() {
          console.log('helloworld');
      };
      
      module.exports = {
          print: return_helloworld
      };
    2. 定义FunctionGraph函数

      打开文本编辑,定义函数,代码如下,文件命名为index.js,保存文件(与helloworld.js保存在同一文件夹下)。

      var h = require('./helloworld.js');
      
      exports.handler = function (event, context, callback) {
          h.print();
          callback(null, JSON.stringify(event));
      }
    说明:
    1. callback返回的第一个参数不为null,则认为函数执行失败,会返回定义在第二个参数的HTTP错误信息。
    2. 函数仅支持返回如下几种类型的值。

      null:函数返回的HTTP响应Body为空。

      []byte: 函数返回的HTTP响应Body内容为该字节数组内容。

      string:函数返回的HTTP响应Body内容为该字符串内容。

      其他:函数会返回值作为对象进行json编码,并将编码后的内容作为HTTP响应的Body,同时设置响应的"Content-Type"头为"application/json"。

  2. 工程打包

    函数工程创建以后,可以得到以下目录,选中工程所有文件,打包命名为fss_examples_nodejs6.10.zip,如图2所示。

    图2 打包

    本例函数工程文件保存在“~/Code/”文件夹下,在打包的时候务必进入Code文件夹下选中所有工程文件进行打包,这样做的目是:定义了FunctonGraph函数的index.js是程序执行入口,确保fss_examples_nodejs6.10.zip解压后,index.js文件位于根目录。

  3. 创建FunctionGraph函数,上传程序包

    登录FunctionGraph控制台,创建Node.js函数,上传 fss_examples_nodejs6.10.zip文件。如 图3所示。
    图3 上传程序包
    说明:
    1. 函数执行入口中的index与定义FunctionGraph函数的文件名保持一致,通过该名称找到FunctionGraph函数所在文件。
    2. 函数执行入口中的handler为函数名,与index.js文件中的函数名保持一致。
    3. 函数执行过程为:用户上传fss_examples_nodejs6.10.zip保存在OBS中,触发函数后,解压缩zip文件,通过index匹配到FunctionGraph函数所在文件,通过handler匹配到index.js文件中定义的FunctionGraph函数,找到程序执行入口,执行函数。

  4. 测试函数

    1. 创建测试事件。

      在函数详情页,单击“请选择测试事件>请配置测试事件”,弹出“配置测试事件”页,输入测试信息如图4所示,单击“保存”。

      图4 配置测试事件
    2. 在函数详情页,选择已配置测试事件,单击“测试”。

  5. 函数执行

    函数执行结果分为三部分,分别为函数返回(由callback返回)、执行摘要、日志输出(由console.log或getLogger()方法获取的日志方法输出),如图5所示。

    图5 测试结果

如果您喜欢这篇文档,您还可以:

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区