Firebase NodeJs ReferenceError:未定义Promise

时间:2016-12-04 20:51:34

标签: node.js firebase promise

尝试将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”。

我做错了什么?任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:3)

我设法解决了这个问题。如果有人遇到同样的问题,以下是我修复它的步骤:

  1. 就我而言,我删除了对firebase-admin模块所做的所有修改。

  2. 如果没有,请安装“es6-promise”。 (npm install es6-promise --save)

  3. 将以下行添加到“server.js”文件中:

  4. require('es6-promise').polyfill();

    请注意,我们不会将polyfill()的结果赋给任何变量。 polyfill()方法将在调用时修补全局环境(在本例中为Promise名称)。

答案 1 :(得分:0)

我在firebase init时遇到了这个问题。我没有在生成的脚本中更改或添加任何代码。我确实解决了这个问题,并且能够通过以下方式进行部署:

  1. 转到功能文件夹“cd functions”
  2. sudo npm install es6-promise --save
  3. 浏览函数/ node_modules / firebase-admin / lib / firebase-namespace.js
  4. 在顶部添加
  5.   

    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;