详解基于详解基于 Node.js 的轻量级云函数功能实现的轻量级云函数功能实现
导语导语
在万物皆可云的时代,你的应用甚至不需要服务器。云函数功能在各大云服务中均有提供,那么,如何用“无所不能”的
node.js 实现呢?
一、什么是云函数?一、什么是云函数?
云函数是诞生于云服务的一个新名词,顾名思义,云函数就是在云端(即服务端)执行的函数。各个云函数相互独立,简单且
目的单一,执行环境相互隔离。使用云函数时,开发者只需要关注业务代码本身,其它的诸如环境变量、计算资源等,均由云
服务提供。
二、为什么需要云函数?二、为什么需要云函数?
程序员说不想买服务器,于是便有了云服务;
程序员又说连 server 都不想写了,于是便有了云函数。
Serverless 架构架构
通常我们的应用,都会有一个后台程序,它负责处理各种请求和业务逻辑,一般都需要跟网络、数据库等 I/O 打交道。而所谓
的无服务器架构,就是把除了业务代码外的所有事情,都交给执行环境处理,开发者不需要知道 server 怎么跑起来,数据库
的 api 怎么调用——一切交给外部,在“温室”里写代码即可。
FaaS
而云函数,正是 serverless 架构得以实现的途径。我们的应用,将是一个个独立的函数组成,每一个函数里,是一个小粒度
的业务逻辑单元。没有服务器,没有 server 程序,“函数即服务”(Functions as a Service)。
三、如何实现?三、如何实现?
由于本实现是应用在一个 CLI 工具里面的,函数声明在开发者的项目文件里,因而大致过程如下:
1、函数声明与存储声明、函数声明与存储声明
我们的目标是让云函数的声明和一般的 js 函数没什么两样:
module.exports = async function (ctx) {
return 'hahha'
}
};
由于云函数的执行通常伴随着接口的调用,所以应该要能支持声明 http 方法:
module.exports = {
method: 'POST',
handler: async function (ctx) {
return 'hahha'
}
};
存储存储
由于有 method 等配置,因此编译的时候,需要把上述声明文件 require 进来,此时,handler 字段是一个 Function 类型的对象。可
以调用其 toString 方法,得到字符串类型的函数体: