尝试将firebase节点应用程序部署到虚拟专用服务器时,我遇到了此错误消息:
/home/.../Backend/node_modules/firebase-admin/lib/firebase-namespace.js:195
this.Promise = Promise;
^
ReferenceError: Promise is not defined
at new FirebaseNamespace (/home/.../Backend/node_modules/firebase-admin/lib/firebase-namespace.js:195:24)
at Object.<anonymous> (/home/.../Backend/node_modules/firebase-admin/lib/default-namespace.js:5:21)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/home/.../Backend/node_modules/firebase-admin/lib/index.js:4:16)
at Module._compile (module.js:456:26)
在我的本地环境中,此节点应用程序运行没有任何问题。两个环境都具有相同的节点,npm和“firebase-admin”模块版本。
所以,我按照here的建议修改了虚拟服务器上的“firebase-admin”模块文件。添加
var Promise = require('es6-promise').Promise;
手动到一些模块源文件,我可以摆脱错误信息。之后,无法从firebase数据库中读取任何内容。
我的代码部分
firebaseDatabase.ref("...").once('value').then(function(snapshot){
....
});
在我的本地环境中读取firebase的内容没有任何问题,永远不会在虚拟服务器上调用它的“then”。
我做错了什么?任何建议都表示赞赏。
答案 0 :(得分:3)
我设法解决了这个问题。如果有人遇到同样的问题,以下是我修复它的步骤:
就我而言,我删除了对firebase-admin模块所做的所有修改。
如果没有,请安装“es6-promise”。 (npm install es6-promise --save)
将以下行添加到“server.js”文件中:
require('es6-promise').polyfill();
请注意,我们不会将polyfill()的结果赋给任何变量。 polyfill()方法将在调用时修补全局环境(在本例中为Promise名称)。
答案 1 :(得分:0)
我在firebase init时遇到了这个问题。我没有在生成的脚本中更改或添加任何代码。我确实解决了这个问题,并且能够通过以下方式进行部署:
var Promise = require('es6-promise')。承诺;
您的标题应如下所示:
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var deep_copy_1 = require("./utils/deep-copy");
var error_1 = require("./utils/error");
var firebase_app_1 = require("./firebase-app");
var credential_1 = require("./auth/credential");
var DEFAULT_APP_NAME = '[DEFAULT]';
var globalAppDefaultCred;
var globalCertCreds = {};
var globalRefreshTokenCreds = {};
var Promise = require('es6-promise').Promise;