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
时,我会得到我没有的错误。
答案 0 :(得分:0)
我怀疑当您在firebase serve
上本地运行时,Firebase会自动设置环境变量。在Heroku上并非如此。您可以通过.env
文件加载它们,但是更好的方法是使用Heroku的配置变量。
您可以从Heroku信息中心设置配置变量(用于FIREBASE_PRIVATE_KEY
,FIREBASE_PROJECT_ID
等):
https://devcenter.heroku.com/articles/config-vars#using-the-heroku-dashboard
答案 1 :(得分:0)
我已经为此工作了几个小时。我尝试了各种尝试,但是最终我只是删除了包含所有代码的整个文件夹,并从Heroku中删除了该应用程序,在我从头开始重做所有东西后,它现在可以工作了(自昨天以来,我做了十次以上)。>
我读到,有时候Heroku的服务器宕机了,也许是因为我在免费层上导致了某种内部滞后。不管是什么原因,现在奇怪地起作用。