【问题标题】:NextJs middleware: use default runtime instead of Edge runtimeNextJs 中间件:使用默认运行时而不是 Edge 运行时
【发布时间】:2022-11-01 13:50:50
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: next.js middleware


    【解决方案1】:

    目前没有办法做到这一点,但它正在努力。见RFC: Switchable Next.js Runtime

    目前,如果您在中间件中需要节点 API,您可以通过创建与节点 API 相关的 API 路由,然后从中间件调用它们来解决此问题。您绝对应该尝试那个,而不是使用我假设的自定义服务器制作自定义中间件,因为自定义服务器有限制。

    【讨论】:

      【解决方案2】:

      现在可以在全局和段级别确定 Next.js 13 应该使用哪个运行时。

      此配置用于定义全局运行时:

      module.exports = {
        experimental: {
          runtime: 'experimental-edge', // 'node.js' (default) | experimental-edge
        },
      };
      

      https://beta.nextjs.org/docs/rendering/edge-and-nodejs-runtimes#global-runtime-option

      如果你想在段(又名服务器组件)级别确定,唯一要做的就是导出一个runtime 常量变量。

      [app/layout.js]

      export const runtime = 'experimental-edge'; // 'node.js' (default) | 'experimental-edge'
      

      https://beta.nextjs.org/docs/rendering/edge-and-nodejs-runtimes#segment-runtime-option

      【讨论】:

        猜你喜欢
        • 2021-11-25
        • 1970-01-01
        • 2020-04-29
        • 2018-10-16
        • 1970-01-01
        • 2012-08-13
        • 2022-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多