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

时间:2019-10-22 00:16:52

标签: node.js firebase heroku

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
  }
});

在我添加到.env的{​​{1}}文件中

.gitignore

我也尝试过:

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

并在.env文件中:

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

无法读取未定义含义的属性“替换”是什么?它不能是FIREBASE_PRIVATE_KEY的值,因为当我运行// I added quotes FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----xxxxx\n-----END PRIVATE KEY-----\n" node app.js时,我会得到我没有的错误。

2 个答案:

答案 0 :(得分:0)

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

您可以从Heroku信息中心设置配置变量(用于FIREBASE_PRIVATE_KEYFIREBASE_PROJECT_ID等): https://devcenter.heroku.com/articles/config-vars#using-the-heroku-dashboard

答案 1 :(得分:0)

我已经为此工作了几个小时。我尝试了各种尝试,但是最终我只是删除了包含所有代码的整个文件夹,并从Heroku中删除了该应用程序,在我从头开始重做所有东西后,它现在可以工作了(自昨天以来,我做了十次以上)。

我读到,有时候Heroku的服务器宕机了,也许是因为我在免费层上导致了某种内部滞后。不管是什么原因,现在奇怪地起作用。