【问题标题】:Trying to use a .env file inside my project尝试在我的项目中使用 .env 文件
【发布时间】:2021-11-23 10:56:56
【问题描述】:

我有一个可以正常工作的后端,所以我试图将它发送到 Heroku 服务器,因为这是我第一次尝试使用 Heroku,我选择了一个免费数据库 (JawsDB MySQL),但试图改变我的本地数据库 MySQL 到 Heroku 上的那个。

.env:6
    DB_HOST=qao3ibsa7hhgecbv.cbetxkdyhwsb.us-east-1.rds.amazonaws.com,

在 MySQL 工作台上安装我的数据库我没有收到任何错误,但我找不到在我的 .env 文件上设置它的方法 这是我的 .env 文件:

require('dotenv').config();

module.expots = {
  authSecret: 'myauthsecret',
  db: {
    DB_HOST=dbhost.us-east-1.rds.amazonaws.com,
    DB_USER=dbuser,
    DB_PASSWORD=dbpassword
    DB_PORT=3306,
    DB_DATABASE=dbname
  }
}

passport.js 使用了我的身份验证密码

这是我设置数据库凭据的 knexfile.js:

const { db } = require('./.env');

module.exports = {
  client: 'mysql2',
  connection: {db,
    mysqlhost: process.env.DB_HOST,
    username: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    port: process.env.DB_PORT,
    database: process.env.DB_DATABASE
  },
  pool: {
    min: 2,
    max: 10
  },
  migrations: {
    tableName: 'knex_migrations'
  }
};

我不知道这有什么问题,在我的本地机器上,我曾经像这样设置我的 .env:

module.exports = {
  authSecret: 'sqt;n/eP-kX-(J#I#8WahB|uhx/i)^$aZ[ZD!PADRZ#Qn@^s;Sl]~wI?3ADxF',
  db: {
    host: '127.0.0.1',
    port: '3306',
    user: 'root',
    password : 'aPassword',
    database : 'database'
  }
}

它正在工作,现在我不知道我应该怎么做才能让它与我在 Heroku 上的数据库一起工作......

【问题讨论】:

    标签: mysql node.js database heroku environment-variables


    【解决方案1】:

    您遇到的错误是因为您正在将 .env 作为 JS 代码加载,而 db 对象不是有效的 JS。有效的JS应该是这样的:

    module.expots = {
      authSecret: 'myauthsecret',
      db: {
        DB_HOST: "dbhost.us-east-1.rds.amazonaws.com",
        DB_USER: "dbuser",
        DB_PASSWORD: "dbpassword",
        DB_PORT: 3306,
        DB_DATABASE: "dbname",
      }
    }
    

    也就是说,对于.env 文件应该包含什么以及如何使用它存在误解。正确的.env 内容应该是:

    # .env
    # Replace with the correct values 
    DB_HOST=dbhost.us-east-1.rds.amazonaws.com
    DB_USER=dbuser
    DB_PASSWORD=dbpassword
    DB_PORT=3306
    DB_DATABASE=dbname 
    

    然后在你的knexfile.js 你做:

    // This loads the .env variables into the process.env 
    require('dotenv').config();
    
    module.exports = {
      client: 'mysql2',
      connection: {
        host: process.env.DB_HOST,
        username: process.env.DB_USER,
        password: process.env.DB_PASSWORD,
        port: process.env.DB_PORT,
        database: process.env.DB_DATABASE
      },
      ...
    };
    
    

    【讨论】:

    • 如果我尝试以这种方式使用它,它会被接受,但它不会验证我的代码,因为我需要存储在 .env 上的秘密,所以我应该如何处理我的秘密那是护照吗?
    • @GNeto knexfile.js 中的这部分require('dotenv').config();.env 文件变量加载到process.env 对象中。在.env 文件中,您应该将这些值替换为您的应用程序的值,并将该内容保密(切勿将.env 文件提交给git)。在您的不同环境(开发/生产/登台)中,您需要为每个环境创建一个不同的.env 文件,并使用与您在那里使用的数据库相对应的凭据。
    • 谢谢,我已经解决了修改所有以不同方式创建的后端的问题,如果我尝试使用 require('dotenv').config();因为它被设置为javascript文件而不是dotenv文件。
    猜你喜欢
    • 2019-12-13
    • 2021-05-22
    • 2022-11-12
    • 2020-02-26
    • 2017-04-27
    • 1970-01-01
    • 2020-04-30
    • 2017-05-20
    • 2022-11-07
    相关资源
    最近更新 更多