如何在Next.js中间件中使用服务器专用函数?

odopli94  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(119)

我正在使用Next.js 13和App Router。
当我尝试将一个只支持服务器的fetch函数导入到 middleware.js 时,我得到以下错误消息:

错误:无法从客户端组件模块导入此模块。它只能从服务器组件中使用。生成页面时发生此错误。所有控制台日志都将显示在终端窗口中。

这看起来很奇怪,因为中间件是在服务器上执行的,导入的函数也是如此。

中间件.js:

import { getClientData } from "@lib/getClientData";

export default async function middleware(req) { ... }

getClientData.js:

import "server-only";

export const getClientData = async () => {
  const data = await ....
};

为什么Next不允许将服务器专用函数导入中间件?

gmxoilav

gmxoilav1#

这个问题在v13.4.20-canary.39中得到了解决。您只需要安装最新版本。
相关讨论:middleware.ts treated as a client side component

相关问题