NextJs 中间件:使用默认运行时而不是 Edge 运行时

mcc*_*una 15 middleware next.js

默认情况下,NextJs 中间件使用 Edge 运行时运行,据我了解,这是因为中间件应该在边缘网络而不是主服务器上运行(在边缘网络上运行会减少延迟,因此这提供了改进)某些场景下的性能)。

这样做的缺点是 Edge 运行时在可以运行的内容方面存在一些限制(在此处列出)。

我的问题是:有没有办法让中间件使用默认运行时而不是 Edge 运行时运行?

在我的情况下,我们没有在边缘托管任何东西,因此边缘运行时对我们施加了一些限制,但没有提供任何好处。一种可能的解决方法是使用自定义中间件而不是 NextJs 中间件,但除非这是唯一的选择,否则我宁愿使用 NextJs 中间件架构和管道,而不是构建我们自己的中间件。

Ps:我们正在使用 NextJs 12.1.6latest撰写此问题时的版本)

FIN*_*ide 13

目前还没有办法做到这一点,但正在研究中。请参阅RFC:可切换 Next.js 运行时

目前,如果您的中间件中需要节点 api,您可以通过创建 api 路由来处理节点 api,然后从中间件调用它们来解决该问题。我认为您绝对应该尝试一下,而不是使用自定义服务器制作自定义中间件,因为自定义服务器有限制。

Next.js 13 添加了更改运行时的选项,但我认为该设置不适用于中间件。不过,该设置可用于使所有内容都在边缘运行。https://beta.nextjs.org/docs/rendering/edge-and-nodejs-runtimes#global-runtime-option