Latest Threat Research:Malicious dYdX Packages Published to npm and PyPI After Maintainer 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架构API网关触发器Web开发框架,让你轻松处理请求和发送响应,可跨平台使用。

unpublished
npmnpm
Version
1.0.0
Version published
Weekly downloads
1
-66.67%
Maintainers
1
Weekly downloads
 
Created
Source

foi

基于Serverless架构API网关触发器Web开发框架,让你轻松处理请求和发送响应,可跨平台使用。

简介

foi 是一款小巧易用的基于Serverless架构API网关触发器的Web开发框架,通过使用 foi ,你可以更优雅地开发Serverless应用。虽然各个云计算平台(例如阿里云、腾讯云等)对Serverless都有不同的实现,体现在各入口参数的不同,你不必因此担心,foi 将帮助你抹平各云计算平台FaaS服务之间的差异,让你的一套代码,可以到处运行。

优点

  • 完美支持Serverless服务的API网关触发器的相关事件,简单易用

  • 相比原生写法,使用 foi 后,能够大大减少开发工作量

  • 兼容从Koa框架迁移Serverless服务,只需要改动几行代码就可以适配

支持平台

目前 foi 已支持以下云计算平台的Serverless服务:

云平台服务名称服务英文名服务英文缩写服务地址foi支持情况
阿里云函数计算Function ComputeFChttps://www.aliyun.com/product/fc已支持
腾讯云云函数Serverless Cloud FunctionSCFhttps://cloud.tencent.com/product/scf开发中
华为云函数工作流Function GraphFGhttps://www.huaweicloud.com/product/functiongraph.html开发中
百度智能云函数计算Cloud Function ComputeCFChttps://cloud.baidu.com/product/cfc.html开发中
AWSLambdaLambdaALhttps://aws.amazon.com/cn/lambda开发中

安装

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

npm install foi

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

cnpm install foi

使用

引用

使用前,首先进行引用:

const Foi = require('foi')

初始化

方式一(推荐)

直接使用解构语法获取 requestresponse 对象:

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

同时也支持以下别名方式(建议使用别名,更简短):

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

方式二

直接获取 app 对象,以属性的方式使用 requestresponse 对象:

const app = new foi(event, context, callback)
app.request    // request对象
app.response   // response对象

同理,方式二也支持 reqres 别名。

const app = new foi(event, context, callback)
app.req    // request对象
app.res    // response对象

使用方式

你可以像使用普通对象那样使用 request 对象和 response 对象,使用它的属性和方法,例如可以使用 request.method 获取请求方法,使用 response.body='abc' 设置响应主体,等等。最终使用 response.send() 发送响应。

request.method         // 获取请求方法
response.body='abc'    // 设置响应主体为abc
response.send()        // 发送响应

完整的属性和方法请查看以下的请求对象(request)和响应对象(response)。

请求对象(request)

属性

request 对象用于接收API网关的入参。包含以下参数:

参数名数据类型含义说明示例
methodstring请求方法'GET'
headersobject请求头{"user-agent":"Mozilla/5.0","accept-language":"zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7"}
protocolstringHTTP协议'HTTP'
hoststring请求域名'api.inlym.com'
urlstring请求url'/path/to?name=mark&age=19'
pathstring请求路径'/path/to'
pathParamsobject请求路径参数{"post_id":123}
queryobject请求查询对象{"name":"mark","age":19}
querystringstring请求查询字符串'name=mark&age=19'
bodystring请求主体'abc'
ipstring请求客户端的IP地址'1.2.3.4'
idstring请求id,由API网关提供'FDB8CDF8-8DD8-425E-8944-FD9A675B9E0E'

备注:

  • 为正常使用,以下参数需要在API网关设置,设置方式见下述 使用须知:

    • protocol
    • host
    • ip
  • query、pathParams等参数按需设置透传或映射。

  • 为保证兼容性,所有的header头将转换成小写字符。

  • 严格来讲,这里的url实际上应是path,为保持兼容性,因此使用url来表示。

  • 严格来讲,这里的path实际上应是pathname,为保持兼容性,因此使用path来表示。

以下属性不常用,但也提供了支持:

参数名数据类型含义说明示例
rawBodybufferbuffer形式的请求主体,常用于图片类请求Buffer(3) [97, 98, 99]

以下属性不建议使用,可用于调试:

参数名数据类型含义说明示例
rawHeadersobject由API网关传入,未做任何处理的原始请求头{"User-Agent":"Mozilla/5.0","Accept-Language":"zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7"}

方法

req.getHeader(field)

获取请求头字段field(不区分大小写)

req.getHeader('Content-Type')    // 'image/png'

req.setHeader(field, value)

设置请求头字段field的值为value

req.setHeader('Content-Type') = 'image/png'

req.removeHeader(field)

移除请求头字段field

req.removeHeader('Content-Type')

别名支持

考虑到部分开发者的使用习惯,同时支持以下别名,使用别名和参数名具有完全一致的效果,您无须考虑使用别名引起的兼容性问题。

属性别名:

参数名别名
headersheader
bodydata
rawBodyrawData
queryqueries, param, params, queryParams, queryParameters
ipclientIp, client_ip
pathpathname
pathParamspathParameters

方法别名:

参数名别名
getHeaderget
setHeaderset
removeHeaderremove

响应对象(response)

属性

response 的包含以下属性:

参数名数据类型含义说明示例
statusCodenumber请求方法200
statusMessagestring状态消息'OK'
headersobject响应头{"content-type": "application/octet-stream"}
bodyany请求主体'abc'
isBase64Encodedboolean是否被base64编码false

方法

注意:以下所列举方法均可对属性直接赋值来设置,当前版本两种使用方式无任何区别,但为了后续版本的拓展性,建议使用以下方法进行设置。

res.getHeader(field)

获取响应头字段field(不区分大小写)

res.getHeader('Content-Type')    // 'image/png'

res.setHeader(field, value)

设置响应头字段field的值为value

res.setHeader('Content-Type') = 'image/png'

res.removeHeader(field)

移除响应头字段field

res.removeHeader('Content-Type')

res.setCode(code)

设置响应状态码

res.setCode(200)

res.setMessage(msg)

设置响应状态消息

res.setMessage('OK')

res.setBody(body)

设置响应body

res.setBody('abc')

res.send(data)

发送响应,若包含data,将替换body

res.send()
res.send('abc')

别名支持

同样考虑到部分开发者的使用习惯,同时支持以下别名,使用别名和参数名具有完全一致的效果,您无须考虑使用别名引起的兼容性问题。

参数名别名
statusCodecode, status
statusMessagemessage, statusText
headersheader
setBodysetData
bodydata
sendend

Keywords

Serverless

FAQs

Package last updated on 28 Apr 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