【问题标题】:A global nextjs middleware without need for import in all the routes无需在所有路由中导入的全局 nextjs 中间件
【发布时间】:2021-10-10 10:52:09
【问题描述】:

TLDR;

nextjs 的中间件,例如 express,我只定义一次,它会自动应用于我的所有路由

我想要一个像express 中的中间件样式我将在server.js(入口文件)中定义一个中间件,中间件将应用于所有路由,无需任何其他工作。好吧,我需要与 NextJs 类似的东西

这些我已经尝试并使用了一段时间

1:使用高阶组件(HOC):

由于这些缺点,我不喜欢这种方法

  • 使用 HOC 将禁用 fast-refresh 功能,拥有More Info Here

  • 我必须在每个 api 路由文件中导入我的中间件,这真的很不好玩,而且将你的 api 文件包装在一个函数中并不是一直要记住的事情

2:使用 next-connect

由于这些缺点,我不喜欢使用这个包

  • 处理 api 路由的 nextjs 方式看起来更自然,因为我使用 nextjs 我想仍然使用 nextjs 方式来处理我的路由。只是为了中间件而没有完全不同的风格
  • HOC一样我不喜欢在每个api文件中导入ncmy-middleware

那么为什么不直接使用像 express 这样的自定义服务器呢?问题是当我使用 nextjs 时,我只想使用 nextjs 也使用自定义服务器会失去很多 nextjs 的酷未来,这也是我使用 nextjs 的部分原因

【问题讨论】:

  • 首先,快速刷新不适用于 API 路由。如果不使用自定义服务器,则无需在每个 API 路由上导入中间件。我想如果你愿意的话,你可以有一个包罗万象的 API 路由,而不是几个。
  • @juliomalves 对不起,我没有注意我也在为 nextjs 页面使用 HOC,所以在这种情况下快速刷新将被禁用。
  • 没有 HOC 是不可能的,如果您有任何解决方法,请告诉我们

标签: reactjs express next.js middleware


【解决方案1】:

您可以实现_app.tsx,它将在所有页面上运行,但它也有一些缺点,例如禁用自动静态生成。

另一种选择是使用express 本身实现自定义服务器,如this example 所示

【讨论】:

  • 使用自定义服务器有太多缺点真的希望nextjs没有自己的api所以我们不必在它们之间进行选择A custom server can not be deployed on Vercel, the platform Next.js was made for.Before deciding to use a custom server please keep in mind that it should only be used when the integrated router of Next.js can't meet your app requirements. A custom server will remove important performance optimizations, like serverless functions and Automatic Static Optimization.
猜你喜欢
  • 2018-07-14
  • 2022-10-21
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多