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

部署至Heroku时动态环境变量未定义问题求助

问题:Heroku部署后Express应用无法根据客户端名称切换对应环境变量

我有一个Express.js应用,其中/CreateShipment接口负责接收JSON数据创建客户订单运单。由于不同客户拥有独立的账户凭证,我编写了一个类,根据客户端名称初始化Axios实例,让请求头匹配对应客户的密钥。

courierProvider.js

const axios = require("axios").default
require("dotenv").config()
const { hashifyClient } = require('../utils/hashify-client')

class Post {
  constructor(clientName) {
    const clientHash = hashifyClient(clientName)
    this.clientNumber = clientHash
  }

  getHeaders() {
    return {
      "Account-Number": process.env[`${this.clientNumber}_ACC_NUMBER`] || process.env.ACC_NUMBER,
      "Authorization": process.env[`${this.clientNumber}_AUTH`] || process.env.AUTH,
    }
  }

  postBase() {
    return axios.create({
      baseURL: 'https://api.shippingendpoint.com/shipping/v1/',
      headers: {
        "Content-Type": "application/json",
        "Accept": "application/json",
        ...this.getHeaders()
      }
    })
  }
}

这个类的作用是根据客户端名称为每个请求配置对应Axios实例。本地Node.js测试时,不同客户端名称对应的环境变量可以正常切换,但部署到Heroku后,日志显示动态读取的环境变量为undefined,请求会自动回退到默认变量。

courier.js

const { Post } = require('../endpoints/courierProvider')

router.post("/CreateShipment", apiAuth, async (req, res) => {
        let AP_Shipment_Body = AP_Shipment_Cx(req.body)
        let post = new Post(clientName);
        let postBase = post.postBase()
        
        let results = await postBase.post('shipments', AP_Shipment_Body)
})

当前实例化类发起请求时,总是使用默认账户而非对应客户的账户。我已经在Heroku中配置好对应环境变量,多次通过Heroku CLI和GUI确认变量存在,尝试过打印动态环境变量、重启dyno等操作,但问题依旧,无法定位本地正常但Heroku异常的原因,希望能实现根据客户端凭证正确切换请求头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:57:11