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

Next.js 14(App Router)服务端读取环境变量的正确方式

Next.js 14 App Router 服务端读取环境变量失败问题

我使用NextJS v14的App Router范式,尝试了两种服务端读取环境变量的方法,但均未成功,且希望不将环境变量值暴露到客户端。

.env.local 文件内容

MY_ENV_VAR=abc123

方法1 - Server Action

服务端代码(app/(actions)/foo.ts)

"use server";

export async function foo() {
  const envVar = process.env.MY_ENV_VAR;
  console.log(envVar); // 输出 'undefined'
}

客户端代码

"use client";
import { foo } from "@/app/(actions)/foo";

export default function Component() {
  const submit = async () => {
    await foo();
    console.log("Done");
  };

  return <button onClick={() => submit()}>Click me</button>;
}

显然,即使是Server Action,若从客户端上下文调用,也会继承客户端环境,这点我理解。

方法2 - API路由

服务端代码(app/api/foo/route.ts)

export async function POST(request: Request) {
  const envVar = process.env.MY_ENV_VAR;
  console.log(envVar); // 仍输出 'undefined'
  return new Response();
}

客户端代码

"use client";

export default function Component() {
  const submit = async () => {
    await fetch("/api/foo", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
    });
    console.log("Done");
  };

  return <button onClick={() => submit()}>Click me</button>;
}

我不理解为何此方法无效,服务端代码已正确触发(可通过next dev终端输出确认),但process.env.MY_ENV_VAR始终为undefined。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:25:55