首页 > 解决方案 > 连接到数据库时出现 DotEnv 错误

问题描述

问题很简单,但我不知道我的想法是否错误,我会尝试解释它,如果有人知道如何解决它会很酷,我会非常感谢你。

  1. 请记住,这个应用程序是用 NextJS 制作的

  2. DotEnv 变量位于我的 NextJs 应用程序根文件夹中的 .env 文件中。

  3. 我有这个数据库连接,我正在使用 DotEnv 变量:

** 更新 **

我没有根据 NextJs 文档对更多数据进行解构,现在我的 .env 是 .env.local 并且仍然无法正常工作,如果有人知道它为什么不工作,您可以自由发表评论。

       const db = mysql({  
            config: {    
                host: process.env.MYSQL_HOST ,    
                port: process.env.MYSQL_PORT , 
                database: process.env.MYSQL_DATABASE , 
                user: process.env.MYSQL_USER ,  
                password: process.env.MYSQL_PASSWORD 
              }
       });  
       

通过这种方式它应该连接但它给了我对数据库的访问错误,但是当我在没有 DotEnv 的情况下放置这样的数据时。

const db = mysql({  
          config: {    
               host: "127.0.0.1" ,    
               port: 3306 , 
               database: "mydatabase" , 
               user: "myuser" ,  
               password: "123" 
         }
    });

连接工作正常。可能是我声明我的 .env 文件或其他东西的方式,如果你知道我做错了什么,我会很高兴知道。感谢阅读。

标签: node.jsdatabasenext.jsenvironment-variablesdotenv

解决方案


我落入了同样的陷阱;Next 处理存储在文件中的环境变量.env.local,而不是.env; 因此,要检索它们,您只需重命名文件

文档:https ://nextjs.org/docs/basic-features/environment-variables

编辑

找到了问题 - 从文档中:

注意:为了保证仅服务器机密的安全,Next.js 在构建时将 process.env.* 替换为正确的值。这意味着 process.env 不是标准的 JavaScript 对象,因此您不能使用对象解构。环境变量必须引用为例如 process.env.NEXT_PUBLIC_PUBLISHABLE_KEY,而不是 const { NEXT_PUBLIC_PUBLISHABLE_KEY } = process.env。

因此,除了将文件重命名为 之外.env.local,请确保也调用变量process.env.VAR_NAME而不是解构


推荐阅读