使用 EMAS Serverless 开发小程序

317 阅读5分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第30天,点击查看活动详情

EMAS Serverless

什么是 EMAS

阿里巴巴应用研发平台(Enterprise Mobile Application Studio,简称EMAS),是面向全端场景(移动App、H5应用、小程序、Web应用、PC应用等)的一站式应用研发平台。EMAS基于广泛的云原生技术(Backend as a Service、Serverless、DevOps、低代码等),致力于为企业、开发者提供一站式的应用研发运营管理服务,涵盖开发、测试、运维、运营等应用全生命周期。

什么是 Serverless

Serverless 是近些年比较火热的一种开发模式。从字面看,它是无服务的意思。但它所表达的意思其实是“不需要过度专注服务器”。也就是说,开发者只需专注于业务实现,像搭建服务器环境,代码部署,服务器扩容等等传统运维的工作,直接交给 Serverless 来做就好了。

对于小程序开发的需求,Serverless 的开发模式非常适合前端开发人员去使用。

什么是 EMAS Serverless

阿里云 EMAS Serverless 是面向小程序开发场景的一套完整的后端服务,它提供了云函数云数据库云存储等基本功能,开发者仅需要在项目中集成 SDK,调用简单的 API 就能完成小程序后端服务的开发。

EMAS Serverless 的云函数使用 NodeJS 作为运行环境。对于前端开发人员来说,基本没有学习成本,可以快速上手。开发者可以将代码打包提交到云端,无需搭建运维服务器。云函数自动完成机器调度与函数部署,弹性扩容,按量收费,轻松应对突发流量。

云数据库基于 MongoDB 文档型数据库,数据以 JSON 格式存储。数据库中的每条记录都是一个 JSON 格式的对象。一个数据库可以有多个集合(相当于关系型数据中的表)。

云存储支持将文本、图片、视频等文件存储到云端。开发者可以在小程序端和控制台使用云存储功能。资源上传成功后,系统会自动生成一个资源链接并返回给小程序端,以供使用。

EMAS Serverless 对基础设施进行抽象封装。

EMAS Serverless = FaaS + BaaS。FaaS 是函数即服务,BaaS 是后端即服务。在这种抽象下,计算资源作为服务而不是服务器。开发者不需要关心服务器或者是底层的运维设施,可以更加关注业务和代码本身。

EMAS Serverless 适合人群

无论是前端工程师,后端工程师,全栈工程师,只要需要开发基于 serverless 的小程序,都可以选择使用EMAS Serverless。

EMAS Serverless 的特点

主要有三个特点:

  1. 面向多端,EMAS Serverless 面向多端小程序场景提供服务。
  2. 无需运维,全托管服务将您从基础设施的管理工作中解放,专注业务领域创新。
  3. 弹性伸缩,实时弹性伸缩和动态负载均衡,轻松应对突发流量。

EMAS Serverless的产品功能架构图

Serverless SDK 介绍

通过安装 EMAS Serverless SDK,可以方便地在小程序中使用 EMAS Serverless 服务。

以支付宝小程序为例,需要先开通 EMAS 服务,然后本地下载并安装好开发者工具,使用开发者工具创建一个小程序项目。切换到项目根目录,安装 SDK

npm i @alicloud/mpserverless-sdk

然后,在项目配置文件 mini.project.json 中,添加以下配置信息。

{
    "enableNodeModuleBabelTransform": true,
    "node_modules_es6_whitelist": [ 
        "@alicloud/mpserverless-sdk"
    ]
}

最后,构造实例对象 mpserverless 并完成 SDK 的初始化:

// app.js
import MPServerless from '@alicloud/mpserverless-sdk'const mpserverless = new MPServerless(my, {
    appId: '小程序 AppID',
    spaceId: '服务空间 SpaceId',
    clientSecret: '服务空间 Secret',
    endpoint: '服务空间 API Endpoint'
});
​
App({
    mpserverless: mpserverless,
    onLaunch() {
        mpserverless.init();
    },
});

之后就能在小程序代码中愉快地使用 EMAS Serverless 的服务了。

云函数的使用

使用云函数的步骤是,先在本地开发完成一个云函数,然后将其部署到 serverless 平台,然后在小程序代码中通过 SDK 提供的特定方法去调用云函数。

开发云函数

以一个简单的 hello 程序为例:

// hello/index.js'use strict';
​
module.exports = async (ctx) => {
  let message = 'hello';
  console.log(message);
  return message;
}

将其打包成一个 hello.zip 压缩包,然后上传到平台:

image-20220823231852856

上传完成之后点击部署:

image-20220823232035192

测试:

image-20220823232357391

在小程序中调用云函数的方式:

const { result } = await mpserverless.function.invoke();
console.log(result);  // 'hello'

云数据库的使用

云数据库的使用也分为两步,先在控制台创建一个集合,用于存放数据;再在云函数中编写操作云数据库的逻辑,然后在小程序代码中调用云函数。

云数据库功能群接口较多,对应了十几个功能。不仅包括基础的增删改查,也包括了 MongoDB 中去重、聚合等高级操作。

image-20220823232703970

以一个简单的查询为例:

module.exports = async (ctx) => {
    let res = await mpserverless.db.collection('users').find({
      age: { $gt: 18 }
    })
    
    return { users: res }
}

云存储的使用

云存储主要提供了两个方法:

  • uploadFile:上传文件
  • deleteFile:删除文件

以在小程序中上传一张相册中的图片为例:

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

SDK 会将文件上传至云存储,并将文件的 URL 返回给小程序端使用。

小结

本文经过阅读《五天玩转 EMAS Serverless》和官方文档整理而成。不得不说,前者是一本优秀的技术小册子,写得通俗易懂。EMAS Serverless 也是一个十分优秀的平台,不仅好用,每月还有免费的额度,十分适合还不熟悉 serverless 的朋友们上手体验。