⚠️
当我们在本文档中谈论中间件时,我们指的是 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>;
};