@40seas/serverless-express

中文文档
4.10.5发布于 2023/11/26Apache-2.0TypeScriptCommonJS零依赖近 30 天下载 6054

此库允许您使用 AWS Lambda 和 Amazon API Gateway 来响应网络和 API 请求, 使用您现有的 Node.js 应用程序框架 .

中文使用文档
文档目录18 节
  1. 快速启动/实例
  2. 自动取款机
  3. 最小Lambda 处理器包装器
  4. Async 设置了 Lambda 处理器
  5. 阿苏雷
  6. Async Azure 函数 v3/v4 处理器包装器
  7. 4.x (中文(简体) )
  8. API 密码
  9. 二进制设置
  10. 解析模式( 默认 ): 'PROMISE' (中文(简体) )
  11. 带有错误的响应( 默认 ): process.env.NODE_ENV === 'development' (中文(简…
  12. 高级 API
  13. 来源
  14. 日志设置
  15. 日志
  16. 访问事件和上下文对象
  17. 为什么在无服务器的环境中运行快递
  18. 装入测试

无服务器快递 文迪亚

Build Status npm npm Contributor Covenantdependencies Status

vendia logo

使用您的已有程序运行 REST API 和其他网络应用程序 节点.js 应用程序框架(Express, Koa, Hapi, Sails等),顶部 AWS 兰布达 财务报告和审定财务报表 亚马逊 API 网关 或者说 Azure 函数。 。 。 .

npm install @vendia/serverless-express

快速启动/实例

想起来跑快吗? 检查我们的基本启动例 包括:

如果您想要将一个已有的应用程序迁移到AWS Lambda,建议它先将最小的示例上并运行,然后复制您的应用程序源.

自动取款机

最小Lambda 处理器包装器

您需要写的唯一 AWS Lambda 具体代码是像下面这样简单的处理器. 所有其他的代码,你可以像平常一样写.

// lambda.js
const serverlessExpress = require('@vendia/serverless-express')
const app = require('./app')
exports.handler = serverlessExpress({ app })

Async 设置了 Lambda 处理器

如果您的应用程序需要执行一些常见的靴子陷阱任务, 如在请求转发到 API 之前连接到数据库, 您可以使用以下模式( 也可在 此示例:

// lambda.js
require('source-map-support/register')
const serverlessExpress = require('@vendia/serverless-express')
const app = require('./app')

let serverlessExpressInstance

function asyncTask () {
  return new Promise((resolve) => {
    setTimeout(() => resolve('connected to database'), 1000)
  })
}

async function setup (event, context) {
  const asyncValue = await asyncTask()
  console.log(asyncValue)
  serverlessExpressInstance = serverlessExpress({ app })
  return serverlessExpressInstance(event, context)
}

function handler (event, context) {
  if (serverlessExpressInstance) return serverlessExpressInstance(event, context)

  return setup(event, context)
}

exports.handler = handler

阿苏雷

Async Azure 函数 v3/v4 处理器包装器

您需要写的唯一 Azure 函数特定代码是简单的 index.js (单位:千美元) function.json 就像下面一样.

// index.js
const serverlessExpress = require('@vendia/serverless-express')
const app = require('./app')
const cachedServerlessExpress = serverlessExpress({ app })

module.exports = async function (context, req) {
  return cachedServerlessExpress(context, req)
}

这个 外键 参数 "name": "$return" 对无服务器快车的工作很重要.

// function.json
{
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "route": "{*segments}"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ]
}

4.x (中文(简体) )

  1. 改进的 API - 终端用户使用和配置的更简单.
  2. 默认承诺解析模式 。 可指定 resolutionMode 用于 "CONTEXT" 或者说 "CALLBACK"
  3. 其他事件来源 - API Gateway V1(REST API),API Gateway V2(HTTP API),ALB,Lambda@Edge
  4. 自定义事件源 - 如果您有其他事件源, 您想要使用我们不本地支持的源, 请检查 DynamoDB 示例
  5. 执行使用模拟请求/响应对象,而不是运行本地套接字上的服务器。 感谢@dougmoscrop来自 https://github.com/dougmoscrop/serverless-http 互联网档案馆的存檔,存档日期2011-12-21
  6. 自动 isBase64Encoded 不指定 binaryMimeTypes启用 binarySettings 来定制。 感谢@dougmoscrop来自 https://github.com/dougmoscrop/serverless-http 互联网档案馆的存檔,存档日期2011-12-21
  7. respondWithErrors 在开发期间更容易调试
  8. 节点.js 12+
  9. 改进对自定义域名的支持

见 升级 从aws-serverless-express和@vendia/serverless-express 3.x升级

API 密码

二进制设置

确定在返回事件源之前,例如返回图像或压缩文件之前,是否应当将响应编码为基数64. 之所以有必要,是因为API Gateway和其他事件源无法直接处理二进制响应. 然后事件源负责在返回客户端之前将它回转为二进制格式.

默认情况下,根据 content-encoding 财务报告和审定财务报表 content-type 您的应用程序返回了信头 。 如果您需要额外的控制, 您可以指定 binarySettings。 。 。 .

{
  binarySettings: {
    isBinary: ({ headers }) => true,
    contentTypes: ['image/*'],
    contentEncodings: []
  }
}

您在此提供的任何值也应在 API Gateway API 上指定 。 在SAM,这看起来像:

ExpressApi:
  Type: AWS::Serverless::Api
  Properties:
    StageName: prod
    BinaryMediaTypes: ['image/*']

解析模式( 默认 ): 'PROMISE'(中文(简体) )

Lambda支持三种方法来结束行刑并返回结果:上下文,召回和许诺. 默认情况下,无服务器表达会使用承诺解析度,但是如果需要更改,可以指定"CONTEXT"或"CALLBACK". 如果你指定"CALLBACK",那么 context.callbackWaitsForEmptyEventLoop = false 也为您设定.

serverlessExpress({
  app,
  resolutionMode: 'CALLBACK'
})

带有错误的响应( 默认 ): process.env.NODE_ENV === 'development'(中文(简体) )

设定为 true 以包含在未处理的例外情况下的错误堆栈跟踪 。 这在发展过程中特别有用。 默认情况下,当 NODE_ENV === 'development' 这样堆栈追踪就不会恢复生产.

高级 API

来源

服务器无表达本地支持 API Gateway, ALB, 和 Lambda@ Edge. 如果您想与其他与 Lambda 整合的 AWS 服务使用 Express , 您可以通过 eventSource见 自定义- mapper- dinamodb 实例。 。 。 .

function requestMapper ({ event }) {
  // Your logic here...

  return {
    method,
    path,
    headers
  }
}

function responseMapper ({
  statusCode,
  body,
  headers,
  isBase64Encoded
}) {
  // Your logic here...

  return {
    statusCode,
    body,
    headers,
    isBase64Encoded
  }
}

serverlessExpress({
  app,
  eventSource: {
    getRequest: requestMapper,
    getResponse: responseMapper
  }
})

源代码

可以配置一个单一的函数来处理更多类型的 AWS 事件 :

  • 简讯
  • 迪纳摩DB流
  • 质量
  • 事件布里奇事件(前云表事件)

假设以下函数配置在 serverless.yml数字 :

functions:
  lambda-handler:
    handler: src/lambda.handler
    events:
      - http:
          path: /
          method: get
      - sns:
          topicName: my-topic
      - stream:
          type: dynamodb
          arn: arn:aws:dynamodb:us-east-1:012345678990:table/my-table/stream/2021-07-15T15:05:51.683
      - sqs:
          arn: arn:aws:sqs:us-east-1:012345678990:myQueue
      - eventBridge:
          pattern:
            source:
              - aws.cloudformation

且配置如下:

serverlessExpress({
  app,
  eventSourceRoutes: {
    'AWS_SNS': '/sns',
    'AWS_DYNAMODB': '/dynamodb',
    'AWS_SQS': '/sqs'
    'AWS_EVENTBRIDGE': '/eventbridge',
    'AWS_KINESIS_DATA_STREAM': '/kinesis',
  }
})

或者,只处理 SNS 事件(地图中的密钥是 选项(中文(简体) )

serverlessExpress({
  app,
  eventSourceRoutes: {
    'AWS_SNS': '/sns',
  }
})

活动将 POST 到已配置的路径.

另外,为了确保从内部活动而不是从外部宣传这些活动 高度建议 改为 确保 Host 页眉匹配 :

  • 师曰: sns.amazonaws.com
  • 迪纳摩DB: dynamodb.amazonaws.com
  • 质量 : sqs.amazonaws.com
  • 事件桥 : events.amazonaws.com
  • KinesisData 史图: kinesis.amazonaws.com

日志设置

指定传输到默认日志的日志设置。 目前, 您只能设置日志 level。 。 。 .

{
  logSettings: {
    level: 'debug' // default: 'error'
  }
}

日志

提供自定义 log 对象为 info, (中文(简体) ), debug 财务报告和审定财务报表 error 方法。 。 。 例如,您可以用一个 温斯顿日志 举个例子.

{
  log: {
    info (message, additional) {
      console.info(message, additional)
    },
    debug (message, additional) {
      console.debug(message, additional)
    },
    error (message, additional) {
      console.error(message, additional)
    }
  }
}

访问事件和上下文对象

此软件包会显示一个功能, 以方便获取 event 财务报告和审定财务报表 context lambda从事件源得到的物体.

const { getCurrentInvoke } = require('@vendia/serverless-express')
app.get('/', (req, res) => {
  const { event, context } = getCurrentInvoke()

  res.json(event)
})

为什么在无服务器的环境中运行快递

装入测试

npx loadtest --rps 100 -k -n 1500 -c 50 https://xxxx.execute-api.us-east-1.amazonaws.com/prod/users

AWS 无服务器快递已移动

11/30日,AWS无服务器快递库从AWS移动至 文迪亚 将被重新命名为 @vendia/serverless-express同样 aws-serverless-express 国家防范机制一揽子计划 将作有利于 @ vendia/ serverles- express。 。 。 .

布莱特,"无服务器快递"库的原始创建者,将继续维护库并给予其应有的关注和关怀. 同时,我们将寻求更多的捐助者参与无服务器快递图书馆的开发和管理。 自动取款机和 SAM小组 将与Vendia、Brett和加入该项目的新维护者一起继续参与行政工作.

我们认为,这是确保使用该图书馆的客户今后获得最佳支持的最佳行动方针。 要更多地了解这一举动或成为新的"无服务器快递"库的维护者,通过这个寄存器上的GitHub问题与我们联系.

最好这样, AWS 无服务器团队 Brett & Vendia团队

版本与发布记录

@40seas/serverless-express 共发布 5 个版本,首次发布于 2023/05/18;过去 12 个月发布了 0 个版本。

版本发布日期距今
4.10.5latest2023/11/262 年前
4.10.42023/11/262 年前
4.10.32023/11/262 年前
4.10.22023/11/192 年前
4.10.12023/05/183 年前

关于 @40seas/serverless-express 的常见问题

@40seas/serverless-express 是什么?

此库允许您使用 AWS Lambda 和 Amazon API Gateway 来响应网络和 API 请求, 使用您现有的 Node.js 应用程序框架 .

如何安装 @40seas/serverless-express?

在项目目录运行 npm install @40seas/serverless-express,或使用 pnpm add / yarn add / bun add。

@40seas/serverless-express 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@40seas/serverless-express 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@40seas/serverless-express 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=12。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@40seas/serverless-express 可以商用吗?

@40seas/serverless-express 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@40seas/serverless-express 的下载量有多少?

根据 npm 官方下载统计,@40seas/serverless-express 在 2026/10/05 – 2026/11/03 这 30 天内被下载 6,054 次,日均约 202 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@40seas/serverless-express 还在维护吗?

最新版本 4.10.5 发布于 2023/11/26(2 年前);至今共发布 5 个版本,其中过去 12 个月发布了 0 个;首次发布于 2023/05/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。