我正在使用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
1条答案
按热度按时间xu3bshqb1#
.env.local
文件中的变量定义不正确。确保变量定义为
=
符号,两边没有空格:另外请注意,
.env.local
仅在运行npm run dev
时使用,它不会用于npm run build
或npm run start
,除非NODE_ENV
变量显式设置为development
。因此,我建议将
.env.local
文件更改为.env
,以消除NODE_ENV
影响环境变量初始化的可能性。