API 路由中未定义 NextJS 环境变量

时间:2021-03-28 19:23:17

标签: reactjs environment-variables next.js

我使用 NextJS v 10.0.9。我在项目的根目录 as described in the docs 中创建了一个 .env.development.local 文件。内容:

API_SERVER=http://127.0.0.1:5000/map/abc123

在 API 路由中:

pages/api/objects.js

export function getObjects() {
    console.log(process.env.API_SERVER)
}

但是当我使用 next dev 运行应用程序时,它会打印 undefined。自从定义/更改变量以来,我已经多次重新启动服务器,但总是未定义。我还尝试添加一个 NEXT_PUBLIC_ 前缀,这应该不是必需的,也不是我们想要的,但我想看看会发生什么。结果:没有变化。我也试过使用 .env.local

我做错了什么?

更新:我在 API 路由上发现了这个 line in the docs:“要使 API 路由正常工作,您需要将函数导出为默认值(又名请求处理程序),然后该函数接收以下参数:req, res。"

所以我将 API 路由中的代码修改为:

export default function getObjects(req, res) {
    console.log("test ", process.env.API_SERVER)
}

但是还是不行。我没有 next.config.js 文件,因为据我所知,从 NextJS 9.4 开始,这不再是必需的。

我还尝试在文件 (TEST=value) 中声明和使用一个全新的变量,但是当我尝试在 API 路由中使用它时,这也是未定义的。

1 个答案:

答案 0 :(得分:0)

问题在于我如何调用 API 路由。当我直接在浏览器中访问它时,环境变量可用并且在控制台中打印得很好。但是我一直在关注一个不是为 NextJS 编写的教程,它让我直接导入 API 函数:

// WRONG WRONG WRONG
import getObjects from './api/objects'

// [...]

export default function MyApp({}) {
    useEffect(() => {
        getObjects().then(data => {
            // do stuff
        }
    })
}