我正在将 Next.js 13 与 App Router 结合使用。
当尝试将仅服务器获取函数导入到 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 不允许将仅服务器功能导入到中间件中?
此问题已在 v13.4.20-canary.38 中修复。您只需安装最新版本即可。
相关讨论:middleware.ts 被视为客户端组件。