一文搞懂EMAS Serverless小程序开发|电子书免费下载

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: EMAS Serverless是阿里云一站式应用研发平台EMAS旗下的一款子产品,是面向小程序场景提供的Serverless开发、运营套件,开发者无需关心服务器和进行底层设施运维,专注于代码逻辑和业务本身,具备极简运维、多端适配、按需使用、弹性扩容等优势,帮助开发者快速部署小程序,本文将带你全面了解EMAS Serverless小程序开发,另附电子书《五天玩转EMAS Serverless》免费下载!!

>> 快来免费下载|电子书《五天玩转EMAS Serverless》 <<


点击免费下载

五天玩转EMAS Serverless


EMAS Serverless 是什么

EMAS Serverless 是阿里云提供的基于 Serverless 技术的一站式后端开发平台,为开发者提供高可用、弹性伸缩的云开发服务,包含云函数、云数据库、云存储、静态网站托管等功能,帮助开发者及企业客户快速实现一云多端应用的搭建,您无需管理服务器等基础设施,便可以无缝对接丰富的云资源。

图1 EMAS Serverless 产品架构


EMAS Serverless 应用场景

ES 支持云函数、云数据库、云存储等能力,具有弹性伸缩、按量付费、 免运维三大特点。弹性伸缩让您免于频繁运维扩缩机器,轻松应对各种流量突发事件,为您节省大量时间。按量付费做到用多少付多少,函数计费精确到毫秒,为您节省大量开支。免运维让开发者不用花费更多的精力在服务器等底层资源上,而是可以将精力放在更具价值的业务逻辑上。因此 ES 广泛适用于电商、咨询、旅游、企业展示、社区、餐厅等行业场景。


图2 EMAS Serverless 应用场景


开通产品

首先打开 EMAS 阿里云控制台: https://emas.console.aliyun.com,新建并进入项目。然后选择平台服务并创建一个服务空间。如图3和图4所示:

图3 EMAS 控制台首页——项目管理

图4 选中平台服务并创建服务空间

计费方式

支持按量付费和包年包月两种付费方式。

  • 按量付费(后付费):一种后付费模式,即先使用再付费。一般适用于有爆发业务量的应用或服务。
  • 包年包月(预付费):一种预付费模式,即先付费再使用。通过包年包月,您可以提前预留资源,同时享受更大的价格优惠,帮您更大程度节省支出。

按量付费

模块

计费项

单价(按量付费)

云函数

资源使用量(GBs)

0.000110592

调用次数(万次)

0.0133

出网流量(GB)

0.8

云数据库

容量(GB/天)

0.07

读操作数(万次)

0.015

写操作数(万次)

0.05

云存储

容量(GB/天)

0.0043

下载操作次数(万次)

0.01

上传操作次数(万次)

0.01

CDN流量(GB)

0.18

静态网站托管

容量(GB/天)

0.0043

CDN流量(GB)

0.18

包年包月

套餐规格

价格(元/月)

套餐描述

开发者版

Free

适合练习、项目开发、启动初期使用。

基础版

5

我们提供了多种规格的套餐,您可以基于业务规模、项目发展阶段按需选择,并伴随业务的增长进行套餐升配。

标准版

24

专业版

82

企业版

316

旗舰版

688

具体的套餐资源量请参考 https://help.aliyun.com/document_detail/435837.html

安装 SDK

我们以开发支付宝小程序为例,演示如何快速借助 ES 能力快速开发部署。

  1. 首先运行在小程序项目根目录执行以下命令。
npm install --save @alicloud/mpserverless-sdk

微信或者支付宝小程序还有一些特殊配置,具体请参考:https://help.aliyun.com/document_detail/444395.html

初始化 SDK

在小程序端开始使用 Serverless 服务前,需要先调用 mpserverless.init 方法完成服务的初始化,且仅能初始化一次。较为通用的做法是在 onLaunch 生命周期中进行初始化操作,并将实例对象 mpserverless 挂载到小程序的全局对象 App,以便后续在其他文件中调用。

这里演示使用的是匿名初始化,这种初始化方式无需在支付宝开放平台配置密钥,不过同时也无法获取小程序用户身份。更多细节请参考:https://help.aliyun.com/document_detail/444402.html

// app.jsimportMPServerlessfrom'@alicloud/mpserverless-sdk'constmpserverless=newMPServerless(my, {
appId: '小程序 AppID',
spaceId: '服务空间 SpaceId',
clientSecret: '服务空间 Secret',
endpoint: '服务空间 API Endpoint'});
App({
mpserverless: mpserverless,
onLaunch() {
mpserverless.init(
authorType: 'anonymous'        );
    },
});

云函数

云函数(FaaS)是一段运行在云端的、轻量的、无关联的并且可重用的代码。无需管理服务器,只需编写和上传代码,即可获得对应的数据结果。云函数的入参只有一个 ctx 对象,出参结构由开发者自行定义:

// 云函数入口定义在 index.js 中module.exports=asyncctx=> {
// do somethingreturnresult}

ctx 对象结构

字段

类型

含义

ctx.args

Object?

开发者通过 SDK 调用云函数时传入的参数体。

例如:mpserverless.function.invoke( 'function-name', args)

HTTP 触发和定时任务触发的入参结构稍有不同,请参考官方文档。

ctx.logger

function

日志工具,可以打印不同类型的日志信息,然后在云函数控制台中查看执行日志。

  • info
  • warn
  • error
  • debug

ctx.mpserverless

SDK

在云函数中为您提供已经完成初始化的 mpserverless 对象,让您可以继续调用 Serverless 其他基础服务,API 使用方式和客户端基本一致。

ctx.env

Object

在云函数中通过 ctx.env 来获取环境参数,例如 SpaceId、调用来源、客户端源 IP 和客户端 UserAgent 等信息。

  • MP_SPACE_ID 服务空间ID
  • MP_SOURCE 调用来源
    • server:服务端触发
    • function:云函数触发
    • client:客户端触发
    • http:HTTP 触发
    • timing:定时触发
  • MP_USER_AGENT 客户端标志,仅来自客户端的调用包含该字段
  • MP_CLIENT_IP 客户端IP,仅来自客户端的调用包含该字段
  • MP_APP_ID 小程序AppId,客户端非匿名授权后调用云函数包含该字段

ctx.httpclient

HttpClient

通过该对象可以请求任何HTTP和HTTPS协议的Web服务。

例如:ctx.httpclient.request( 'https://***' )

开发部署与调试

我们以开发一个两数四则运算的云函数 TwoNumOperation 为例:

// index.jsmodule.exports=asyncctx=> {
const { action, x, y } =ctx.args;
letresult=0switch (action) {
case'+': result=x+y; break;
case'-': result=x-y; break;
case'*': result=x*y; break;
case'/':
if (y===0) {
thrownewError('cannot divide by 0')
            }
result=x/y; break;
default:
thrownewError('not support action '+action)
    }
return { result }
}

新建文件夹 TwoNumOperation,然后在文件夹下面新建文件 index.js 并放入上述代码,然后整体打包该文件夹得到压缩文件 TwoNumOperation.zip 。如下图5所示:

图5 云函数代码包

如下图6所示,首先我们在阿里云控制台新建一个云函数 TwoNumOperation,函数名称必须和文件夹名称一致。然后将压缩好的代码包上传部署。部署成功后可以在控制台测试运行,点击代码执行,输入函数执行参数即可运行云函数。点击日志可以查看云函数的执行日志,方便开发者调试。

图6 云函数部署、执行、日志查看

在小程序中调用云函数

如图7所示在小程序中调用云函数。 index.axml 布局文件简单写了一个表单包含三个 input,绑定表单提交函数 invokeFunctionindex.js 文件首先从全局导入 mpserverless 对象,然后在表单提交函数中获取参数 actionxy,然后通过 mpserverless.function.invoke 调用云函数。

图7 在小程序中调用云函数


云数据库

云数据库服务是基于 MongoDB 托管在云端的数据库,数据以 JSON 格式存储。作为开发者,您可以在客户端或者云函数中通过 mpserverless 对象读写数据。

mpserverless.db.collection('user').findOne( { name: '张三' } )

和 MySQL 对比

ES 云数据库服务底层使用的是 MongoDB,以 JSON 格式存储数据。数据库中的每条记录都是一个 JSON 格式的文档,一个数据库可以包含多个集合(相当于关系型数据库中的表),每个集合可看做一个 JSON 文档数组。MongoDB 数据库和关系型数据库 MySQL 的对比如下表所示。

云数据库 (MongoDB)

关系型数据库 (MySQL)

数据库(database)

数据库(database)

表(collection)

表(table)

记录(document)

行(row)

域(field)

列(column)

索引(index)

索引(index)

自动将_id字段作为主键

主键(primary key)

数据结构设计策略

MongoDB 是一个基于分布式文件存储的 NoSQL 数据库,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。以电商平台为例,通常电商平台的核心数据包含产品、用户、购物车和订单。订单是由用户购买产品产生的,订单就可以认为是产品和用户之间的关联关系产生的。在订单产生之前,产品和用户之间的关联关系是通过购物车来维持的。针对上述案例,可以设计一个名称为products的产品表存储以下信息:

  • 产品基础信息:包含展示信息、商品规格等;
  • 属性信息:属性都归属于一个产品,属于N对1的关系。因此作为子文档存储在 products 集合中较合适;
  • 库存及价格信息:库存不仅仅跟产品关联,更直接对应产品属性。因此也应该放在 products 集合中;
{
"id": 5573,
"name": "Egg T恤",
"desc": {
"short": "限量版 Egg T恤,穿上它你离极客也不远了",
"long": "这是一段非常长的描述",
"category": {
"_id": "48bf43a..29e90bc",
"name": "上衣"    }
  },
"attributes": [
    {
"id": 1151,
"name": "尺寸",
"values": [
        {
"id": 3871,
"value": "S"        },
        {
"id": 3874,
"value": "M"        },
        {
"id": 3875,
"value": "L"        }
      ]
    },
    {
"id": 1152,
"name": "性别",
"values": [
        {
"id": 3872,
"value": "男"        },
        {
"id": 3873,
"value": "女"        }
      ]
    }
  ],
"sku": [
    {
"id": 1153,
"stock": 30,
"attributeIds": [
3871,
3872      ],
"attributes": [
        {
"key": "尺寸",
"value": "S"        },
        {
"key": "性别",
"value": "女"        }
      ]
    }
  ]
}

创建数据表

在阿里云控制台上点击“+”新建数据表

图8 在控制台新建数据表

添加数据记录

insertOne

插入用户张三

mpserverless.db.collection('users').insertOne( { 
name: '张三',
age: 18} )

insertMany

mpserverless.db.collection('users').insertOne( [ 
    { name: '张三', age: 18 },
    { name: '李四', age: 17 }
] )

删除数据记录

deleteOne

mpserverless.db.collection('users').deleteOne( { 
name: '张三'} )

deleteMany

删除年龄小于18的用户

mpserverless.db.collection('users').deleteMany( { 
age: { $lt: 18 }
} )

查询数据记录

findOne

mpserverless.db.collection('users').findOne( { 
age: { $gt: 18 }
} )

find

查询所有大于18的用户 name,并将查询结果按年龄升序返回

mpserverless.db.collection('users').find( {
age: { $gt: 18 }
}, {
projection: { name: 1 },
sort: { age: 1 }
} )

findOneAndDelete

查询并删除小于且最接近18岁的一条数据

mpserverless.db.collection('users').findOneAndDelete( {
age: { $lt: 18 }
}, {
sort: { age: -1 }
} )

findOneAndReplace

查询并替换 name 为张三的一条数据

mpserverless.db.collection('users').findOneAndReplace( {
name: "张三"}, {
name: "张三三",
age: 20}, {
upsert: true// 如果不存在则插入} )

findOneAndUpdate

查询并更新 name 为张三的一条数据

mpserverless.db.collection('users').findOneAndUpdate( {
name: "张三"}, {
$set: {
name: "张三三",
age: 20    }
}, {
upsert: true// 如果不存在则插入} )

更新数据记录

updateOne

更新第一个张三的年龄为22岁

mpserverless.db.collection('users').updateOne( {
name: "张三"}, {
$set: {
age: 22    }
} )

updateMany

把所有的张三年龄都设置为22岁

mpserverless.db.collection('users').updateMany( {
name: "张三"}, {
$set: {
age: 22    }
} )

replaceOne

把第一个张三姓名改为张阿三,年龄改为22岁

mpserverless.db.collection('users').replaceOne( {
name: "张三"}, {
$set: {
name: '张阿三',
age: 22    }
}, {
upsert: true// 如果不存在则插入,为 flase 时代表不存在则不做任何操作} )

其他指令

distinct

返回 age 字段大于18的所有姓名(如果有相同的name 只返回一个)

mpserverless.db.collection('users').distinct(
'name', 
    { age: { $gt: 18 }
)

count

查找集合 users 中所有 age 大于18的记录数量

mpserverless.db.collection('users').count( {
age: { $gt: 18 }
} )

aggregate

聚合管道查询,该管道允许用户通过一系列基于阶段的操作来处理数据,详情请参考帮助文档 https://help.aliyun.com/document_detail/435909.html

云存储

mpserverless.file 对象提供 uploadFiledeleteFile 方法管理文件。上传的文件将通过CDN进行网络加速。单个文件要求小于100 MB。

上传文件

支付宝小程序上传文件示例

my.chooseImage({
chooseImage: 1,
success: res=> {
constpath=res.apFilePaths[0];
constoptions= {
filePath: path,
        };
mpserverless.file.uploadFile(options)
        .then(res=> { 
console.log(res);  
        })
        .catch(err=> {  
console.log(err);
        });
    },
});

返回示例:

{
"fileUrl": "https://mp-…storage/2e7acad6-2212-4863-aaa7-4e89d7d8df4c.png", 
"filePath": "cloudstorage/2e7acad6-2212-4863-aaa7-4e89d7d8df4c.png"}

删除文件

根据文件地址从服务空间中删除该文件

constfileURL='https://mp...bspapp.com/xxx-xx/4b82ded0-0118-4de4-9f50-ab13110a1ffb.jpg';
mpserverless.file.deleteFile(fileURL)

总结

EMAS Serverless 依托阿里巴巴数字经济技术能力和业务能力提供云函数、云存储、云数据库等 Serverless 服务。大大提升了前端工程师的价值,让开发者快速落地小程序开发工作,按量付费和自动弹性伸缩省时省力。此外, ES 还支持静态网站托管以及面向支付宝生态的云调用模块,技术与商业联动为开发者提供一站式地小程序生态服务。

参考资料

EMAS 控制台:https://emas.console.aliyun.com

帮助文档:https://help.aliyun.com/document_detail/436030.html

开发指南:https://help.aliyun.com/document_detail/444395.html


>> 快来免费下载|电子书《五天玩转EMAS Serverless》 <<


相关文章
|
7天前
|
人工智能 小程序
【一步步开发AI运动小程序】十五、AI运动识别中,如何判断人体站位的远近?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,无需后台支持,具有快速、体验好、易集成等特点。本文介绍如何利用插件判断人体与摄像头的远近,确保人体图像在帧内的比例适中,以优化识别效果。通过`whole`检测规则,分别实现人体过近和过远的判断,并给出相应示例代码。
|
6天前
|
人工智能 小程序 UED
【一步步开发AI运动小程序】十六、AI运动识别中,如何判断人体站位?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,本地引擎无需后台支持,具备快速、体验好、易集成等优势。本文介绍如何利用插件的`camera-view`功能,通过检测人体站位视角(前、后、左、右),确保运动时的最佳识别率和用户体验。代码示例展示了如何实现视角检查,确保用户正或背对摄像头,为后续运动检测打下基础。
|
19天前
|
人工智能 小程序 IDE
【一步步开发AI运动小程序】九、姿态辅助调试桌面工具的使用
随着AI技术的发展,各大厂商推出的AI运动APP如“乐动力”、“天天跳绳”等,使云上运动会、线上健身等概念大热。本文将指导你如何利用“云智AI运动识别小程序插件”,在微信小程序中实现类似功能,包括工具搭建、服务启动及数据回传等步骤,助力开发者高效开发AI运动小程序。
【一步步开发AI运动小程序】九、姿态辅助调试桌面工具的使用
|
12天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数02
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,详细解析了俯卧撑动作的检测规则构建与执行流程,涵盖卧撑和撑卧两个姿态的识别规则,以及如何通过继承`sports.SportBase`类实现运动分析器,适用于小程序开发者。
|
12天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01
随着AI技术的发展,AI运动APP如雨后春笋般涌现,如“乐动力”、“天天跳绳”等,推动了云上运动会、线上健身等热潮。本文将指导你从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”,介绍运动识别原理、计量方式及运动分析器基类的使用,帮助你在小程序中实现运动计时和计数功能。下篇将继续探讨运动姿态检测规则的编写。
|
6天前
|
移动开发 小程序 PHP
校园圈子论坛系统采取的PHP语音和uni账号开发的小程序APP公众号H5是否只需要4800元?是的,就是只需要4800元
关于校园圈子论坛系统采用PHP语言和uni-app开发的小程序、APP、公众号和H5是否仅需4800元这个问题,实际上很难给出一个确定的答案。这个价格可能受到多种因素的影响
|
2天前
|
人工智能 小程序 数据处理
uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!
近期,多家康复机构咨询AI运动识别插件是否适用于肢力运动受限患者的康复锻炼。本文介绍该插件在康复锻炼中的应用场景,包括康复运动指导、运动记录、恢复程度记录及过程监测。插件集成了人体检测、姿态识别等功能,支持微信小程序平台,使用便捷,安全可靠,帮助康复治疗更加高效精准。
|
14天前
|
数据采集 人工智能 小程序
【一步步开发AI运动小程序】十、姿态动作相似度比较
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,重点讲解姿态动作相似度比较功能的运用,包括样本动作帧的采集和姿态相似度的计算方法,以及在组合运动中的应用实例。
|
7天前
|
人工智能 小程序 JavaScript
【一步步开发AI运动小程序】十四、主包超出2M大小限制,如何将插件分包发布?
本文介绍了如何从零开始开发一个AI运动小程序,重点讲解了通过分包技术解决程序包超过2M限制的问题。详细步骤包括在uni-app中创建分包、配置`manifest.json`和`pages.json`文件,并提供了分包前后代码大小对比,帮助开发者高效实现AI运动功能。
|
13天前
|
人工智能 小程序 开发者
【一步步开发AI运动小程序】十一、人体关键点跳跃追踪
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,涵盖云上运动会、健身打卡等热门应用场景。通过示例代码展示如何调用插件功能,实现动作追踪与分析,助力开发者快速上手。

热门文章

最新文章

相关产品

  • 函数计算