Latest Threat ResearchGlassWorm Loader Hits Open VSX via Developer Account Compromise.Details
Socket
Book a DemoInstallSign in
Socket

foi

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install
Package version was removed
This package version has been unpublished, mostly likely due to security reasons

foi

基于 Serverless 架构的 Node.js Web 开发框架,提供和 Koa 一致的 API,可跨云平台使用。

unpublished
npmnpm
Version
2.2.0
Version published
Maintainers
1
Created
Source

foi

基于 Serverless 架构的 Node.js Web 开发框架,提供和 Koa 一致的 API,可跨云平台使用。

GitHub:https://github.com/inlym/foi

欢迎 star

简介

foi 是一款基于 Serverless 架构的 Node.js Web 开发框架,提供和知名框架 Koa 一致的 API,可跨云平台使用。严格意义上来说,foi 并不是一个完整的框架,只是提供了一个方便开发 Serverless 应用的中间件。foi 主要做了以下两项工作:

  • 统一对接各大云平台的 Serverless 实现
  • 将封装好的 API 以 Koa 框架风格的 API 输出供开发者使用

用以下的架构图表示 foi 的功能:

优点

跨多云平台

各云平台(阿里云、腾讯云、华为云、AWS等)对于 Serverless 的实现存在一定的差异,使用上也存在很大的差异,foi 针对各云平台的 API 做了兼容,使开发者在使用时无需阅读各云平台的开发文档,直接以 Koa 的 API 开发即可。foi 使得一份代码能够在所有云平台的 Serverless 架构服务上部署和运行。

低迁移成本

从 Koa 框架迁移至 foi 框架,只需要更改 2 行代码即可使用。这里面 foi 框架做了大量的底层工作,兼容 Koa 的 API。(详情点击查看 从 Koa 迁移 foi )

另外,绝大多数的 Koa 中间件都可以在 foi 中使用。(由于 Serverless 架构限制,部分中间件无法使用。)

低学习成本

由于对开发者提供了与 Koa 一致的 API,因此开发无需额外花费时间学习 foi 本身,只需要根据文档说明对 foi 进行安装和使用即可,与 Koa 的差异仅在于初始化的 2 行代码。

安装

foi 的安装非常简单,你可以直接使用 npm 进行安装:

npm install foi

如果访问速度较慢,建议使用 cnpm 安装:(如需查看 cnpm 的安装方式,请 点击 )

cnpm install foi

使用

hello world

以下是一个输出响应(response)的主体为 'hello world' 的典型使用方式:

'use strict'
const Foi = require('foi')

// Serverless 架构结构体
module.exports.handler = function (event, context, callback) {
	// 初始化 app
	const app = new Foi({ event, context, callback })

	// 主体部分使用 app.use, 和 Koa 一致的 API
	app.use(ctx => {
		ctx.body = 'hello world'
	})

	// 假的 listen, 兼容 Koa, 建议使用 app.init()
	app.listen()
}

你可以看出,在使用上,和 Koa 几乎没有任何区分,Koa 中在 app.use( ) 中使用的代码,均能在 foi 中运行。

初始化选项

初始化的标准格式是:

const app = new Foi(options)    // options 是一个对象

针对不同的云平台和触发器,对应的 options 参数略有不同,其中包含了一些公共参数,和一些触发器的私有参数。

公共参数

const options = {
	slient: false,    // 是否禁止打印 foi 框架日志,默认 false,可选
	trigger: 'aliyun-apigw',    // 触发器,阿里云API网关触发器为'aliyun-apigw'
}

阿里云 - API网关

const options = {
	evnet: event,
	context: context,
	callback: callback,    // Serverless 传入的三要素,注意这里的属性值要和定义的变量名一致
}

配置

由于框架限制,部分参数需要在云平台进行配置才可以获取到。请按照你使用的触发器进行配置。

阿里云 - API网关

(1)路径参数 - params 通过以下方式配置后,你可以使用 ctx.params 获取路径参数对象

(2)其他参数 - ip, host, protocol 要获取 ip, host, protocol 参数,请在API网关处进行如下配置,否则会获取不到对应参数。

从 Koa 迁移 foi

迁移方式

从以上的使用方式看出,最核心的 app.use( ) 不需要改动。我们先来看一个最普通的 Koa 框架应用:

'use strict'

const Koa = require('koa')

const app = new Koa()

app.use(ctx=>{
	ctx.body = 'hello world'
})

app.listen(80)

只要改动2处,就可以迁移至 foi : (1)变更引用模块

const Koa = require('koa')

变更为

const Foi = require('foi')

(2)变更初始化方式

const app = new Koa()

变更为

const app = new Foi({event, context, callback})

总共只需改动以上 2 行代码,以下部分为 Serverless 附加的代码:

module.exports.handler = function(event, context, callback){

}

中间件兼容情况

foi 兼容 Koa 框架的绝大多数中间件,但以下2类中间件不支持:

  • 中间件承载的功能已经封装在 foi 框架里面了,例如 koa-bodyparser 中间件,可以直接通过 ctx.request.body 获取 body 请求的 body 内容。
  • 基于“流”的中间件,更准确地讲,foi 不支持基于 Koa 的 req 和 res 对象的绝大多数中间件。(在 foi 实现中,屏蔽的原生的 req 和 res,虽然仍然能够使用 req 和 res,但这只是作为 request 和 response 的别名)

框架 foi 和 midway比较

midway 是阿里云自研的 Node.js Web 开发框架,能够实现 foi 的所有功能。两者的差异非常大,举一个例子,如果说 foi 类比于 jQuery 的话,可以将 midway 类比为 Angular + Typescript + Webpack + Node.js + NPM。

foi 仅作为一个非浸入式开发的工具库,而 midway 提供了用于 Serverless 开发的一整套工具链。

以下是 foi 和 midway 的对比:

foimidway
统一对接各云平台接口支持支持
提供和 Koa 一致的 API支持支持
学习成本非常低非常高
自动化部署不支持支持
开发工具链丰富

支持情况

各云平台触发器的支持情况:

云平台触发器触发器名称支持情况
阿里云API网关触发器aliyun-apigw已支持
阿里云HTTP触发器aliyun-http开发中
腾讯云API网关触发器qcloud-apigw开发中
华为云API网关触发器huawei-apigw开发中
百度智能云API网关触发器baidu-apigw开发中
AWSAPI网关触发器aws-apigw开发中

Keywords

Serverless

FAQs

Package last updated on 24 Jul 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts