介绍
npm 包 @cpmech/az-lambda 是一个用于编写 AWS Lambda 函数的 Node.js 框架。它是基于 aws-lambda 包的拓展,提供了一些额外的功能和特性。
这个包主要用于以下的场景:
- 写 Serverless 函数
- 在 AWS Lambda 上实现 RESTful API
- 在 AWS Lambda 上实现 graphql API
安装
在项目中使用 npm 或 yarn 安装:
npm install @cpmech/az-lambda
或者
yarn add @cpmech/az-lambda
使用方法
1. 创建一个函数
-- -------------------- ---- ------- ----- ------ - ---------------------------- ----- ------- - ----- ------- -------- -- - ------ - ----------- ---- ----- ------- -------- - - ------------------ - --- ------------------------
2. 自定义配置
-- -------------------- ---- ------- ----- ------ - ---------------------------- ----- ------- - ----- ------- -------- -- - ------ - ----------- ---- ----- ------- -------- - - ----- ------ - --- --------------- - -- ----- --------------- ------ --------------- ------- ------- ----------- -- ------------------ - ---------------
3. 使用中间件
-- -------------------- ---- ------- ----- ------ - ---------------------------- ----- ---- - -------------------- ----- ---------- - ------------------------- ----- ------- - ----- ------- -------- -- - ------ - ----------- ---- ----- ------- -------- - - ----- ------ - --- -------------------- -- --- ------- ------------- - ------------------ - ---------------
原理介绍
1. handler 的写法
与 aws-lambda 包类似,@cpmech/az-lambda 包也需要将函数定义为一个 handler,它需要接收两个参数:event 和 context。
const handler = async (event, context) => { // 函数体 }
其中,event 包含了来自获取请求的详细信息(例如 HTTP 操作的请求参数和 POST 操作的表单数据)。context 包含了与函数运行环境相关的属性和方法,通过 context 这个对象,您可以访问环境变量和 AWS Lambda 运行时提供的一些其他服务(例如 S3、DynamoDB 等)。
2. 使用方法
创建一个函数:
const Lambda = require('@cpmech/az-lambda') const handler = async (event, context) => { // 函数体 } exports.myFunction = new Lambda(handler).export()
其中,handler 是定义了函数逻辑的函数,使用 new Lambda(handler).export() 将这个函数暴露给外部。
exports.myFunction = new Lambda(handler).export()
export() 函数用于将 Lambda 对象转换为 AWS Lambda 所支持的方法。
3. 自定义配置
你可以使用 Lambda 构造函数的第二个参数来自定义一些配置,例如:
const lambda = new Lambda(handler, { allowedOrigins: ['*'], allowedMethods: ['GET', 'POST', 'OPTIONS'], })
allowedOrigins
和 allowedMethods
分别定义了在您的 Lambda 函数上使用 CORS 的允许来源和允许操作类型。
4. 中间件
你可以在 Lambda 实例上使用 use() 方法来使用中间件,例如:
const lambda = new Lambda(handler).use( // 多个中间件 cors(), bodyParser(), )
这个方法会接受一个或多个中间件函数。
示例代码
以下是一个使用 @cpmech/az-lambda 包编写 AWS Lambda 函数的示例代码:
-- -------------------- ---- ------- ----- ------ - ---------------------------- ----- ---- - -------------------- ----- ---------- - ------------------------- ----- ------- - ----- ------- -------- -- - --- - ---- - - --------------------------- ---- - ---- -- ------- ------ - ----------- ---- ----- ------- ---------- - - ----- ------ - --- -------------------- ------ ------------ ----- --- ------------- - ------------------ - ---------------
本示例中,使用了 @koa/cors
中间件和 koa-bodyparser
中间件。假设你已经将代码上传到 AWS Lambda,你可以通过以下链接调用这个函数:
https://your-api-gateway-end-point-name/your-path/?name=John
OpenAPI、GraphQL 和其他一些特性的示例,请参考官方文档。
结论
@cpmech/az-lambda 是一个非常实用的 npm 包,可以使开发者更加轻松地编写 AWS Lambda 函数。在使用这个包之前,你需要有一定的 Node.js 和 AWS Lambda 的基础。同时,包内的示例代码也是非常实用的,可以帮助开发者更好地了解各种场景下函数的写法,快速上手。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/143453