无法访问Next.js API路由中的环境变量

fcwjkofz  于 2023-06-22  发布在  其他
关注(0)|答案(1)|浏览(165)

我正在使用Next.js 13和API路由与数据库交互的项目。我试图将数据库凭据存储在.env文件中,但未加载变量。
我已经验证了.env文件正在加载,但是当我记录process.env时,输出不包括我定义的变量。
有什么我错过了或做错了吗?如何在我的Next.js API路由中访问环境变量?任何帮助将不胜感激。
我尝试使用以下代码访问API路由index.js中的变量:

export default function handler(req, res) {
  console.log(process.env.DB_NAME);
  console.log(process.env.NEXT_PUBLIC_API_URL);
  console.log(process.env);
  res.status(200).send("OK");
}

另外,我尝试在next.config.js中使用serverRuntimeConfig,如下所示:

/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: true,
  webpack: (config) => {
    config.experiments = { ...config.experiments, topLevelAwait: true };
    return config;
  },
  serverRuntimeConfig: {
    DB_HOST: process.env.DB_HOST,
  },
};

module.exports = nextConfig;

在我的API路由index.js中:

import getConfig from "next/config";
const { serverRuntimeConfig } = getConfig();
export default function handler(req, res) {
  console.log(serverRuntimeConfig.DB_HOST);
  res.status(200).send("OK");
}

但是,输出始终未定义变量。
我还尝试在页面路由中使用getServerSideProps,但得到了相同的答案。
我已经验证了.env文件位于项目的根目录中。我还在进行更改后重新启动了开发服务器。
预期的输出将是'd localhost'
my .env.local文件:

DB_NAME: name
DB_USER: postgres
DB_PASSWORD: *****
DB_HOST: localhost
BD_DIALECT: postgres
xu3bshqb

xu3bshqb1#

.env.local文件中的变量定义不正确。
确保变量定义为=符号,两边没有空格:

.env.local

DB_NAME=name
DB_USER=postgres
DB_PASSWORD=*****
DB_HOST=localhost
BD_DIALECT=postgres

另外请注意,.env.local仅在运行npm run dev时使用,它不会用于npm run buildnpm run start,除非NODE_ENV变量显式设置为development
因此,我建议将.env.local文件更改为.env,以消除NODE_ENV影响环境变量初始化的可能性。

相关问题