【问题标题】:Heroku Logs -TypeError: Cannot read property 'replace' of undefinedHeroku Logs -TypeError:无法读取未定义的属性“替换”
【发布时间】:2020-02-18 02:10:56
【问题描述】:
npm v6.12.0
node v10.16.0

我正在为我的应用程序使用 firebase sdk。在我今天更改所有服务器信息之前,我从来没有遇到过这个问题。这是我尝试通过我的应用程序远程访问代码时得到的 Heroku 错误日志

TypeError: 无法读取未定义的“替换”属性

我跑$ heroku logs --app myAppName:

2019-10-21T21:07:12.988431+00:00 app[web.1]: privateKey: process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n'),
2019-10-21T21:07:12.988433+00:00 app[web.1]: ^
2019-10-21T21:07:12.988435+00:00 app[web.1]: 
2019-10-21T21:07:12.988436+00:00 app[web.1]: TypeError: Cannot read property 'replace' of undefined

但是当我从终端运行node app.js 或本地运行时,一切正常。此外,当我从终端运行 npm start 时,一切正常。这个问题的原因可能是什么?

代码如下:

const admin = require("firebase-admin");
admin.initializeApp({
  credential: admin.credential.cert({
    projectId: process.env.FIREBASE_PROJECT_ID,
    privateKey: process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n'),
    clientEmail: process.env.FIREBASE_CLIENT_EMAIL
  }),
  databaseURL: process.env.FIREBASE_DATABASE_URL,
  databaseAuthVariableOverride: {
    uid: process.env.MY_CUSTOM_TOKEN
  }
});

在我添加到.gitignore.env 文件中

FIREBASE_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----xxxxx\n-----END PRIVATE KEY-----\n

我也试过了:

// removed the .replace(/\\n/g, '\n')
privateKey: process.env.FIREBASE_PRIVATE_KEY

在 .env 文件中:

// I added quotes
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----xxxxx\n-----END PRIVATE KEY-----\n"

Cannot read property 'replace' of undefined 是什么意思? 它不能是 FIREBASE_PRIVATE_KEY 的值,因为当我运行 node app.jsnpm start 时,我会收到我不知道的错误不。

【问题讨论】:

    标签: node.js firebase heroku


    【解决方案1】:

    我怀疑当您在本地(在 firebase serve 上)运行时,Firebase 会自动设置环境变量。在 Heroku 上,情况并非如此。您可以通过 .env 文件加载它们,但更好的方法是使用 Heroku 的配置变量。

    您可以从 Heroku 仪表板设置配置变量(FIREBASE_PRIVATE_KEYFIREBASE_PROJECT_ID 等): https://devcenter.heroku.com/articles/config-vars#using-the-heroku-dashboard

    【讨论】:

    • 您好,谢谢您的提示。我实际上是这样做的,并且不断出现相同的错误。这很奇怪。
    • @AnyPhitlok 无法读取未定义的属性替换是什么意思?
    • 表示process.env.FIREBASE_PRIVATE_KEY的值是undefined,所以不能调用函数replace()。未定义的原因是process.env 上没有属性FIREBASE_PRIVATE_KEY
    【解决方案2】:

    我已经为此工作了好几个小时。我尝试了各种方法,但最终我只是删除了包含所有代码的整个文件夹,并从 Heroku 中删除了该应用程序,在我从头开始重做所有内容后,它现在可以正常工作了(从昨天开始,我这样做了超过 10 次)。

    我读到有时 Heroku 的服务器出现故障,也许是因为我处于免费层这一事实导致某种内部延迟。不管是什么原因,它现在奇怪地起作用了。

    【讨论】:

      猜你喜欢
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多