# @40seas/serverless-express 中文文档

规范地址：https://npmcn.com/package/%4040seas/serverless-express/

版本：4\.10\.5
npm 元数据更新时间：2023-11-26T14:22:57.782Z
中文译文更新时间：2026-11-06T02:57:16.845Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%4040seas/serverless-express
原文对照：https://npmcn.com/package/%4040seas/serverless-express/?lang=original
项目主页：https://github.com/vendia/serverless-express
源码仓库：https://github.com/vendia/serverless-express

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：68.5 kB，41 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=12
- 运行依赖：0 个
- 首次发布：2023-05-18T14:05:35.204Z
- 最新版本发布：2023-11-26T14:22:57.572Z
- 近 30 天下载量：6054（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：5（近 12 个月 0 个）

## 中文简介

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

## 安装

```sh
npm install @40seas/serverless-express
```

也可以使用：`pnpm add @40seas/serverless-express`、`yarn add @40seas/serverless-express`、`bun add @40seas/serverless-express`

## README

# 无服务器快递 [文迪亚](https://vendia.net/)

![Build Status](https://github.com/vendia/serverless-express/workflows/CICD/badge.svg) ![npm](https://img.shields.io/npm/v/@vendia/serverless-express.svg) ![npm](https://img.shields.io/npm/dm/aws-serverless-express.svg) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](https://npmcn.com/package/%4040seas/serverless-express/CODE_OF_CONDUCT.md)[![dependencies Status](https://img.shields.io/librariesio/github/vendia/serverless-express)](https://github.com/vendia/serverless-express/blob/master/package.json)

[![vendia logo](https://raw.githubusercontent.com/vendia/serverless-express/mainline/vendia-logo.png)](https://vendia.net/)

使用您的已有程序运行 REST API 和其他网络应用程序 [节点.js](https://nodejs.org/) 应用程序框架(Express, Koa, Hapi, Sails等),顶部 [AWS 兰布达](https://aws.amazon.com/lambda/) 财务报告和审定财务报表 [亚马逊 API 网关](https://aws.amazon.com/api-gateway/) 或者说 [Azure 函数](https://docs.microsoft.com/en-us/azure/azure-functions/)。 。 。 .

```bash
npm install @vendia/serverless-express
```

## 快速启动/实例

想起来跑快吗? [检查我们的基本启动例](https://npmcn.com/package/%4040seas/serverless-express/examples/basic-starter-api-gateway-v1) 包括:

-   Lambda 函数
-   快捷应用程序
-   [无服务器应用程序模型( SAM)](https://github.com/awslabs/serverless-application-model)编号 :[云阵](https://aws.amazon.com/cloudformation/aws-cloudformation-templates/) 模板
-   配置、部署和管理应用程序的帮助脚本

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

## 自动取款机

### 最小Lambda 处理器包装器

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

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

### Async 设置了 Lambda 处理器

如果您的应用程序需要执行一些常见的靴子陷阱任务, 如在请求转发到 API 之前连接到数据库, 您可以使用以下模式( 也可在 [此示例](https://github.com/vendia/serverless-express/blob/mainline/examples/basic-starter-api-gateway-v2/src/lambda-async-setup.js):

```js
// 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` 就像下面一样.

```js
// 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"` 对无服务器快车的工作很重要.

```json
// 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 示例](https://npmcn.com/package/%4040seas/serverless-express/examples/custom-mapper-dynamodb)
5.  执行使用模拟请求/响应对象,而不是运行本地套接字上的服务器。 感谢@dougmoscrop来自 [https://github.com/dougmoscrop/serverless-http 互联网档案馆的存檔,存档日期2011-12-21](https://github.com/dougmoscrop/serverless-http)
6.  自动 `isBase64Encoded` 不指定 `binaryMimeTypes`启用 `binarySettings` 来定制。 感谢@dougmoscrop来自 [https://github.com/dougmoscrop/serverless-http 互联网档案馆的存檔,存档日期2011-12-21](https://github.com/dougmoscrop/serverless-http)
7.  `respondWithErrors` 在开发期间更容易调试
8.  节点.js 12+
9.  改进对自定义域名的支持

见 [升级](https://npmcn.com/package/%4040seas/serverless-express/UPGRADE.md) 从aws-serverless-express和@vendia/serverless-express 3.x升级

## API 密码

### 二进制设置

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

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

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

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

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

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

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

```js
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 实例](https://npmcn.com/package/%4040seas/serverless-express/examples/custom-mapper-dynamodb)。 。 。 .

```js
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`数字 :

```yaml
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
```

且配置如下:

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

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

```js
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`。 。 。 .

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

### 日志

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

```js
{
  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从事件源得到的物体.

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

  res.json(event)
})
```

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

-   只付你用来的钱
-   无基础设施可管理
-   配置为零的自动缩放
-   [使用计划](http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-api-usage-plans.html)
-   [缓存](http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html)
-   [授权](http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html)
-   [粘贴](http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-deploy-api.html)
-   [SDK 生成](http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-generate-sdk.html)
-   [API 监测](http://docs.aws.amazon.com/apigateway/latest/developerguide/monitoring-cloudwatch.html)
-   [请求验证](http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html)
-   [文档](http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-documenting-api.html)

## 装入测试

`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移动至 [文迪亚](https://github.com/vendia/serverless-express) 将被重新命名为 `@vendia/serverless-express`同样 [`aws-serverless-express` 国家防范机制一揽子计划](https://www.npmjs.com/package/aws-serverless-express) 将作有利于 [@ vendia/ serverles- express](https://www.npmjs.com/package/@vendia/serverless-express)。 。 。 .

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

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

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

## 常见问题

### @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 和提交记录判断。

