You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署含JawsDB MySQL的项目到Heroku时.env文件失效如何解决

问题根因与修复方案

你混淆了标准.env环境变量文件和Node.js配置模块的语法,同时存在配置逻辑冲突、拼写错误、属性名错误三类问题,按以下步骤修改即可:


1. 修正文件类型错误(核心问题)

标准.env文件是纯键值对格式,不能写Node.js的require、module.exports等JS语法,你目前把.env写成了Node配置模块,直接导致解析报错。

正确的.env文件内容:

# 仅写键值对,每一行一个变量,不要加逗号、引号等多余符号
DB_HOST=qao3ibsa7hhgecbv.cbetxkdyhwsb.us-east-1.rds.amazonaws.com
DB_USER=dbuser
DB_PASSWORD=dbpassword
DB_PORT=3306
DB_DATABASE=dbname
AUTH_SECRET=myauthsecret

2. 新增Node配置模块(单独存放导出逻辑)

你之前把导出逻辑写在了.env里,现在单独新建一个config.js文件存公共配置,内容如下:

require('dotenv').config();

module.exports = {
  authSecret: process.env.AUTH_SECRET,
  db: {
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    port: process.env.DB_PORT,
    database: process.env.DB_DATABASE
  }
}

注意:你之前写的module.expots是拼写错误,正确写法是module.exports


3. 修正knexfile.js配置

你之前的配置同时引用了导入的db对象和process.env,且连接属性名错误(MySQL连接需要的是host不是mysqlhost,用户名属性是user不是username),修改后内容:

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

module.exports = {
  client: 'mysql2',
  connection: db,
  pool: {
    min: 2,
    max: 10
  },
  migrations: {
    tableName: 'knex_migrations'
  }
};

如果需要保留process.env的写法,也可以简化为:

require('dotenv').config();

module.exports = {
  client: 'mysql2',
  connection: {
    host: process.env.DB_HOST,
    user: 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'
  }
};

4. 其他配套修改

  • 之前引用.env里的authSecret的地方,全部改为引用config.js里导出的authSecret即可
  • Heroku平台端不需要上传.env文件,直接在Heroku后台的「Settings」-「Config Vars」里把上面.env里的所有键值对逐一添加,平台会自动注入到运行环境的process.env中

内容的提问来源于stack exchange,提问作者user11240162

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:27:02