@codegenie/serverless-express

中文文档
5.0.0发布于 2026/04/16Apache-2.0TypeScriptCommonJS零依赖构建来源已验证近 30 天下载 265.2万

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

中文使用文档
文档目录19 节
  1. 无服务器快递 开始一个新的软件项目? 检查代码Genie - a 全堆栈 App 生成器 以您的数据模型为基础,提供完…
  2. 快速启动/实例
  3. 自动取款机
  4. 最小Lambda 处理器包装器
  5. Async 设置了 Lambda 处理器
  6. 阿苏雷
  7. Async Azure 函数 v3/v4 处理器包装器
  8. 4.x (中文(简体) )
  9. API 密码
  10. 二进制设置
  11. 解析模式( 默认 ): 'PROMISE' (中文(简体) )
  12. 带有错误的响应( 默认 ): process.env.NODE_ENV === 'development' (中文(简…
  13. 高级 API
  14. 来源
  15. 日志设置
  16. 日志
  17. 访问事件和上下文对象
  18. 为什么在无服务器的环境中运行快递
  19. 装入测试

v5.0.0 释放! 包括Node.js 24支持并去除已贬值的API. 见 升级 用于 v4 的升级指令 .

无服务器快递

Code Genie Logo

开始一个新的软件项目? 检查代码Genie - a 全堆栈 App 生成器 以您的数据模型为基础,提供完整的 AWS 服务器无源代码项目。 包括:

  1. 在 Amplify 主机上托管的 Next.js Web App
  2. 在API Gateway和Lambda上运行的无服务器快取 REST API
  3. 身份识别/认证用户库
  4. DynamoDB 数据库
  5. Cloud Development Kit(CDK) 基础设施作为代码(IAC)
  6. 与 GitHub 动作的持续整合/交付(CI/CD)

无服务器快递

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

npm install @codegenie/serverless-express

快速启动/实例

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

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

自动取款机

最小Lambda 处理器包装器

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

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

Async 设置了 Lambda 处理器

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

// lambda.js
require('source-map-support/register')
const serverlessExpress = require('@codegenie/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('@codegenie/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, VPC Lattice
  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和@codegenie/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和 VPC Lattice( 只有 V2事件 - 事件源) AWS_VPC_LATTICE_V2) (中文(简体) ). 如果您想与其他与 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',
    'AWS_S3': '/s3',
    'AWS_STEP_FUNCTIONS': '/step-functions',
    'AWS_SELF_MANAGED_KAFKA': '/self-managed-kafka',
  }
})

或者,只处理 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('@codegenie/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移动至 文迪亚 将被重新命名为 @codegenie/serverless-express同样 aws-serverless-express 国家防范机制一揽子计划 将作有利于 @ codegenie/ server 表达。 。 。 .

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

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

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

版本与发布记录

@codegenie/serverless-express 共发布 24 个版本,首次发布于 2023/12/14;过去 12 个月发布了 5 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
5.0.0latest2026/04/166 个月前
5.0.0-beta.22026/04/077 个月前
5.0.0-beta.12025/12/0811 个月前
4.17.2-beta.12025/12/0811 个月前
4.17.12025/12/0711 个月前
4.17.02025/07/111.3 年前

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

@codegenie/serverless-express 是什么?

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

如何安装 @codegenie/serverless-express?

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

@codegenie/serverless-express 支持 TypeScript 吗?

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

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

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

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

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

@codegenie/serverless-express 可以商用吗?

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

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

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

@codegenie/serverless-express 还在维护吗?

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