开发者社区> 问答> 正文

什么是云函数?

什么是云函数?

展开
收起
珍宝珠 2020-02-17 16:38:23 9053 0
1 条回答
写回答
取消 提交回答
  • 阿里云头部开发者运营小二

    云函数(FaaS)是一段运行在云端的、轻量的、无关联的、并且可重用的代码。无需管理服务器,只需编写和上传代码,即可获得对应的数据结果。使用云函数可以使企业和开发者不需要担心服务器或底层运维设施,可以更专注代码和业务本身,也可以使代码进一步解耦,增加其重用性。

    在客户端只需依赖mpserverless-sdk,在应用的上下文中进行简单的鉴权配置,即可调用云函数。

    云函数的入参只有一个ctx对象,该对象可获取调用的云函数时传入的参数,也可获取小程序serverless服务空间的云数据库,云存储等服务。

    例如,我们定义一个云函数,名为hello。代码如下所示:

    //云函数定义在index.js中,此文件为云函数的入口文件 module.exports = ctx => { const args = ctx.args; return { "text": args.hello, }; };云函数支持使用Node.js进行开发。您可将代码提交到云端运行,在客户端使用小程序Serverless提供的API进行调用。您还可以在云函数中直接通过API调用数据存储和文件存储的服务资源。 说明 目前云函数内不能调用其他云函数,只支持客户端的使用场景,例如支付宝小程序。 步骤一 定义云函数

    关联上对应的后端云服务后,您可以在服务端目录中编写云函数的代码。

    登录小程序云控制台,创建云函数。
    详细操作,请参见新建云函数。
    注意 云函数的名称必须和要上传的Node.js代码包名称一致。
    新建云函数
    在小程序的server/functions目录下创建云函数目录。
    
    其中index.js是云函数getImageList的入口文件。
    
    └── server/
        └── functions
               └── getImageList
                       └── index.js
    
    编写云函数代码。
    以下代码示例展示了如何从数据库images里面查出特定用户上传的图片记录。
    
    module.exports = async (ctx) => {
      const images = await ctx.mpserverless.db.collection('images').find({ owner: ctx.args.username });
      return { images };
    };
    
    说明 云函数的返回值类型仅支持JSON格式。
    打包云函数文件。
    确保云函数文件名称和控制台上创建的云函数名称一致且为ZIP格式。
    

    步骤二 部署云函数

    编写云函数代码后,您需要将云函数代码上传至控制台发布代码。

    在左侧导航栏,选择小程序Serverless > 云函数。
    单击已创建的函数名称链接。
    在发布管理页签,单击上传js包或更新js包,然后选择要上传的代码包。
    说明 上传的代码包必须满足以下要求:
        代码包的名称必须和在控制台上创建的函数名称一致。
        代码包必须是.zip文件。
        上传的代码包必须包含index.js文件。
    上传成功后,单击代码部署。
    

    步骤三 调用云函数

    云函数代码发布后,在客户端您可以使用mpserverless.function.invoke方法调用上述定义的云函数。

    以下代码示例展示了如何获取用户上传的图片记录,然后更新页面数据。

    // 引入MPServerless模块 const MPServerless = require('@alicloud/mpserverless-sdk');
    // 初始化MPServerless对象 const mpServerless = new MPServerless({
    uploadFile: my.uploadFile, request: my.request, getAuthCode: my.getAuthCode, }, { appId: '1234456789', // 小程序应用标识 spaceId: 'db4dd657-7041-470a-90xxxxx', // 服务空间标识 clientSecret: '6c3c86xxxx6', // 服务空间 secret key endpoint: 'https://api.bspapp.com', // 服务空间地址,从小程序 serverless 控制台处获得 }); // 调用云函数getImageList mpServerless.function.invoke('getImageList', {
    username: 'Vincent', }).then((res) => { if (res.success && res.result) { this.setData({ imageList: res.result.images }); } }).catch(console.error);

    云函数是一个后端服务,有时需要获得从客户端传来的参数。通过云函数内置的ctx.args方法,您可以获得从客户端传来的参数。 客户端代码

    以下是客户端代码示例:

    await mpserverless.function.invoke('hello', { hello: 'world' });

    云函数代码

    以下是云函数代码示例:

    module.exports = async ctx => { ctx.logger.info('hello %s', ctx.args.hello); };

    在云函数中,您可以直接调用同一环境(空间)的数据存储和文件存储服务。ctx.mpserverless在云函数封装了小程序的基础服务, API使用方式和客户端一致。

    例如,要从数据存储获取数据,可以直接调用ctx.mpserverless.db方法:

    module.exports = async ctx => { const args = ctx.args; return await ctx.mpserverless.db.collection('user').find({ uid: args.uid }); };

    云函数(FaaS)是一段运行在云端的、轻量的、无关联的、并且可重用的代码。无需管理服务器,只需编写和上传代码,即可获得对应的数据结果。使用云函数可以使企业和开发者不需要担心服务器或底层运维设施,可以更专注代码和业务本身,也可以使代码进一步解耦,增加其重用性。

    在客户端只需依赖mpserverless-sdk,在应用的上下文中进行简单的鉴权配置,即可调用云函数。

    云函数的入参只有一个ctx对象,该对象可获取调用的云函数时传入的参数,也可获取小程序serverless服务空间的云数据库,云存储等服务。

    云函数提供了 ctx.httpclient HTTP 请求方法。无需额外依赖,您就可以请求任何 HTTP 和 HTTPS 协议的 Web 服务。

    例如,请求一个网页:

    module.exports = async ctx => { const res = await ctx.httpclient.request('https://www.alipay.com/x/notFound.htm'); return { html: res.status === 200 ? res.data : '', }; };

    其中,ctx.httpclient返回的是一个urllib实例。

    云函数(FaaS)是一段运行在云端的、轻量的、无关联的、并且可重用的代码。无需管理服务器,只需编写和上传代码,即可获得对应的数据结果。使用云函数可以使企业和开发者不需要担心服务器或底层运维设施,可以更专注代码和业务本身,也可以使代码进一步解耦,增加其重用性。

    在客户端只需依赖mpserverless-sdk,在应用的上下文中进行简单的鉴权配置,即可调用云函数。

    云函数的入参只有一个ctx对象,该对象可获取调用的云函数时传入的参数,也可获取小程序serverless服务空间的云数据库,云存储等服务。

    2020-02-17 16:48:28
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云计算巢加速器:让优秀的软件生于云、长于云 立即下载
基于函数计算的serverless应用开发 立即下载
函数计算最佳实践:基于函数计算实现 Serverless 自动化运维 立即下载