AWS
核心组件
中间件
⚠️

当我们在本文档中谈论中间件时,我们指的是 next 的 middleware 以及 next 的整个 routing 层。例如,在此上下文中,next.config.js 的 headers、redirects、rewrites 等都被视为 routing

自 V3 以来,您可以决定将中间件移出服务器,放入它自己的函数中,您可以将其放置在其他后端函数之前。

默认情况下,中间件位于服务器内部,但您可以通过在 open-next.config.ts 文件中将 middleware.external 设置为 true 将其移出。

{
  middleware: {
    external: true;
  }
}

默认情况下,它使用 aws-lambda 包装器和 aws-cloudfront 转换器,以便您可以将其与 AWS Lambda@edge 和 Cloudfront 一起使用。 您也可以通过将包装器设置为 cloudflare 并将转换器设置为 edge 在 Cloudflare Workers 内部使用它。

特殊覆盖

源解析器

由于您的应用程序可能被拆分到不同的源站,您需要能够为请求检索正确的源站。这就是 originResolver 函数的目的。

默认情况下,它使用 pattern-env 解析器,该解析器使用 OPEN_NEXT_ORIGIN 环境变量来解析源站以及您在 open-next.config.ts 中定义的模式。此环境变量应该是具有以下形状的对象的字符串化版本:

{
  // 键应与 `open-next.config.ts` 中用于函数的键相同
  [origin: string]: {
    host: string;
    protocol: "http" | "https";
    port?: number;
    customHeaders?: Record<string, string>;
  }
}

您当然可以通过在 open-next.config.ts 文件中提供自己的 originResolver 函数来覆盖此行为。 这是 originResolver 函数的类型:

type OriginResolver = BaseOverride & {
  resolve: (path: string) => Promise<Origin | false>;
};