⚠️
本文档中提到的 middleware(中间件)既指 Next.js 的 middleware
功能,也包含整个 Next.js 的 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 中使用。
特殊覆盖配置
源解析器
由于您的应用可能被拆分到不同的源(origin),因此需要能够为请求检索正确的源。这就是 originResolver
函数的作用。
默认情况下,它使用 pattern-env
解析器,该解析器使用 OPEN_NEXT_ORIGIN
环境变量以及 open-next.config.ts
中定义的模式来解析源。该环境变量应该是以下形状对象的字符串化版本:
{
// 键名应与 `open-next.config.ts` 中为函数使用的键名相同
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>;
};