You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Next.js App Router的Apollo Client包装器中使用noStore?

解决Next.js App Router中客户端组件ApolloWrapper使用运行时环境变量的问题

在Next.js App Router中,客户端组件无法直接读取非NEXT_PUBLIC_前缀的运行时环境变量——这类变量默认仅在服务器端可用。要让ApolloWrapper(客户端组件)获取Docker Compose配置的BACKEND变量,推荐通过服务器组件传参的方式实现,具体步骤如下:

步骤1:在服务器组件RootLayout中传递环境变量

app/layout.tsx是服务器组件,可直接读取运行时环境变量,将BACKEND作为props传给ApolloWrapper:

import { ApolloWrapper } from './ApolloWrapper'
import './global.css'

export const metadata = {
  title: 'Welcome to example'
}

export default function RootLayout({
  children
}: {
  children: React.ReactNode
}) {
  const backendUrl = process.env['BACKEND']

  return (
    <html lang="en">
      <body>
        <ApolloWrapper backendUrl={backendUrl}>{children}</ApolloWrapper>
      </body>
    </html>
  )
}

步骤2:修改ApolloWrapper接收并使用传递的变量

更新app/ApolloWrapper.tsx,通过props接收backendUrl,并在创建Apollo Client时使用该值:

'use client'

import { HttpLink } from '@apollo/client'
import {
  ApolloClient,
  ApolloNextAppProvider,
  InMemoryCache
} from '@apollo/experimental-nextjs-app-support'

interface ApolloWrapperProps {
  children: React.ReactNode
  backendUrl: string | undefined
}

function makeClient(backendUrl: string | undefined) {
  if (!backendUrl) {
    throw new Error('BACKEND环境变量未配置')
  }

  const httpLink = new HttpLink({
    uri: backendUrl,
    fetchOptions: { cache: 'no-store' }
  })

  return new ApolloClient({
    cache: new InMemoryCache(),
    link: httpLink
  })
}

export function ApolloWrapper({ children, backendUrl }: ApolloWrapperProps) {
  return (
    <ApolloNextAppProvider makeClient={() => makeClient(backendUrl)}>
      {children}
    </ApolloNextAppProvider>
  )
}

替代方案(不推荐):使用NEXT_PUBLIC_前缀

如果你不介意将BACKEND地址暴露给客户端,可将环境变量重命名为NEXT_PUBLIC_BACKEND,此时客户端组件可直接通过process.env.NEXT_PUBLIC_BACKEND读取,无需修改组件传参逻辑。但该方式会将变量嵌入客户端代码,仅适用于公开API地址场景。

内容的提问来源于stack exchange,提问作者user3142695

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:25:09