云函数使用

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

云函数使用

云函数开发

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

云函数示例

云函数目录结构
在Serverless小程序工程的server/functions目录下创建云函数目录,其中index.js是云函数getImageList的入口文件。

└── server/
    └── functions
           └── getImageList
                   └── index.js

云函数代码结构
以下代码示例展示了如何从数据库images里面查出特定用户上传的图片记录。云函数里可以直接通过API调用数据存储,文件存储的服务资源以及其他云函数。

• 当云函数被客户端或者其他云函数调用时,可以通过ctx.args获得调用传来的参数。
• 可以通过ctx.logger方法打印不同类型的日志信息,然后在云函数控制台中查看执行日志。
• 在云函数内通过ctx.env来获取环境参数,例如SpaceId、调用来源、客户端源IP和客户端UserAgent等信息。ctx.env是一个object,它包含MP_SPACE_ID(SpaceId),MP_SOURCE(调用来源),MP_USER_AGENT(客户端User-agent),MP_CLIENT_IP(客户端IP)。
• 在云函数中,您可以直接调用同一环境(空间)的数据存储和文件存储服务以及获取当前请求用户的基本信息。ctx.mpserverless在云函数封装了小程序的基础服务, API使用方式和客户端一致。

  • 通过ctx.mpserverless.db调用云数据库能力,如ctx.mpserverless.db.collection('user').find({ uid: args.uid })。
  • 通过ctx.mpserverless.file调用文件存储能力,如ctx.mpserverless.file.deleteFile(args.filePathUrl)。
  • 通过ctx.mpserverless.user获取当前访问用户基本信息,如ctx.mpserverless.user.getInfo()。
  • 通过ctx.mpserverless.function调用云函数能力,如mpserverless.function.invoke('dataAnalytics', {range: 30})调用其他云函数。
  • 通过ctx.httpclient HTTP 请求方法,无需额外依赖,您就可以请求任何 HTTP 和 HTTPS 协议的 Web 服务。如ctx.httpclient.request('https://www.alipay.com/x/notFound.htm')。

module.exports = async (ctx) => {
  ctx.logger.info('%s %s', ctx.env.MP_SPACE_ID, ctx.args.username);
  const images = await ctx.mpserverless.db.collection('images').find({ owner: ctx.args.username });
  return { images };
};

创建云函数

在代码工程创建云函数
1.新建或打开小程序Serverless工程,点击server目录关联对应的云服务空间。
image.png

2.在functions目录上右键选择新建云函数。
image.png

在云控制台创建云函数
打开小程序云控制台,在云函数页面,点击新建云函数。在新建云函数框里输入云函数的函数名。
18.jpeg

部署云函数

编写云函数代码后,您需要将云函数代码在代码工程里或者在云控制台上传。
在代码工程部署云函数
编写云函数代码后,右键点击已创建的云函数,选择部署云函数。
19.png
在云控制台部署云函数
1.打开小程序云控制台,在云函数页面,单击已创建的函数名称链接。
2.在发布管理页签,单击上传js包或更新js包,然后选择要上传的代码包。
上传的代码包必须满足以下要求:
• 代码包的名称必须和在控制台上创建的函数名称一致。
• 代码包必须是.zip文件。
• 上传的代码包必须包含index.js文件。
• 如果引用了第三方包,代码包里必须包含node_modules。

  1. 上传成功后,单击代码部署。
    20.jpeg

调用云函数

1.在小程序项目的根目录执行以下命令安装 SDK。

npm install @alicloud/mpserverless-sdk --save

2.在 app.js 中初始化SDK(全局只需初始化一次)。

// 1. 引入必要的 sdk
import MPServerless from '@alicloud/mpserverless-sdk';
 
// 2. 在 app.js 中对 sdk 进行初始化
// 2.1 初始化 MPServerless
my.serverless = my.serverless || new MPServerless({
  uploadFile: my.uploadFile,
  request: my.request,
  getAuthCode: my.getAuthCode,
}, {
  // 2.2 参数能在小程序云服务空间详情中获取
  appId: '',
  spaceId: '',
  clientSecret: '',
  endpoint: ''
});

3.在小程序页面您可以使用mpserverless.function.invoke方法调用上述定义的云函数。

// 调用云函数getImageList
my.serverless.function.invoke('getImageList', {     
  username: 'Vincent',
}).then((res) => {
  if (res.success && res.result) {
    this.setData({ imageList: res.result.images });
  }
}).catch(console.error);

课程作业

支付宝扫码登陆官方小程序【小程序云开发助手】,在 学习 > 训练营打卡作业 > 云函数使用 中提交作业。
image.png

相关实践学习
【玩转ComfyUI】基于函数计算一键部署AI生图平台ComfyUI
本次实验将带大家通过使用阿里云产品函数计算FC,快速使用ComfyUI实现更高质量的图像生成。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
存储 数据管理 分布式数据库
《一文读懂分布式数据库:打破数据存储的边界》
随着数据量的激增,单台服务器难以满足存储和处理需求,分布式数据库应运而生。它通过将数据分散存储在多个节点上,实现高可扩展性、高可用性、性能提升等优势。例如,跨国公司可将各地数据存储在本地节点,降低传输成本并提高稳定性。此外,分布式数据库还具备数据分布灵活性、成本优势及一致性保障,为企业管理海量数据提供了高效解决方案。其广泛应用在互联网、金融等领域,展现出巨大潜力。
717 0
|
安全 Linux iOS开发
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
959 0
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
|
存储 人工智能 自然语言处理
ACE++:输入想法就能完成图像创作和编辑!阿里通义推出新版自然语言驱动的图像生成与编辑工具
ACE++ 是阿里巴巴通义实验室推出的升级版图像生成与编辑工具,支持多种任务,如高质量人物肖像生成、主题一致性保持和局部图像编辑。
1356 8
|
存储 JSON 小程序
【小程序云开发】不用后端也能构建完整的微信小程序
本文介绍了如何从零开始学习和掌握微信小程序云开发,包括云函数、云数据库和HTTP触发等重要概念。通过详细的步骤和示例,读者将学会如何创建和部署云函数,以及如何使用云数据库来存储和管理小程序的数据。同时,本文还介绍了如何通过HTTP触发器实现小程序与外部API的数据交互,从而为小程序开发提供更灵活、高效的后端解决方案。无论您是初学者还是有一定经验的开发者,本文都将帮助您轻松掌握微信小程序云开发,并为您的小程序开发项目提供更多可能性。
3535 0
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
Rust 网络协议 安全
揭开Rust网络编程的神秘面纱:全新的Socket体验,让你告别内存泄漏的噩梦!
【8月更文挑战第31天】Rust语言凭借其卓越的内存安全性和高性能,在网络编程领域展现出独特优势。本文将带你探索Rust中的Socket编程,展示如何使用标准库`std::net`模块轻松实现TCP服务器与客户端。通过简洁的代码示例,你将看到Rust如何简化网络通信流程,并通过`async/await`异步模型高效处理并发连接。此外,Rust社区提供的优秀库如`tokio`和`async-std`进一步增强了异步网络编程的能力。无论是从基础示例还是高级应用,Rust都将为你带来耳目一新的网络编程体验。
1715 0
|
监控 Serverless API
利用云函数实现后端服务的无服务器化
【10月更文挑战第7天】本文介绍了无服务器架构中的核心组件——云函数,探讨了其概念、优势及应用。云函数使开发者能在无需管理服务器的情况下运行代码,具备自动扩展、成本效益、快速迭代和聚焦业务逻辑等优势。文章还详细说明了实施云函数的步骤,并分享了实战技巧,旨在帮助读者更好地理解和应用这一技术。
|
监控 API 持续交付
深入理解微服务架构:优势与挑战
【10月更文挑战第6天】深入理解微服务架构:优势与挑战
798 0
|
存储 SQL 关系型数据库
Python实现给qq自动发消息 终于有人来和我说早安晚安了吗...
Python实现给qq自动发消息 终于有人来和我说早安晚安了吗...
|
前端开发 JavaScript 安全
前端技术栈都有那些,需要学会啥才可以上手写项目?
【7月更文挑战第9天】 前端技术栈包括HTML/CSS/JS基础,熟悉Vue.js/React/Angular等框架,掌握Git、Webpack等工具,理解HTTP协议及安全概念。使用Node.js和编辑器提升效率,从基础到框架层层深入,实践项目以巩固知识,持续学习应对技术更新。
1077 0