【问题标题】:Firebase NodeJs ReferenceError: Promise is not definedFirebase NodeJs ReferenceError:未定义承诺
【发布时间】:2017-04-19 05:03:42
【问题描述】:

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

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

【问题讨论】:

  • npm 版本:3.10.0 ;节点版本:7.1.0; v8 版本:5.4.500.36; firebase-admin 版本:4.0.3;

标签: node.js firebase promise


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    1. 转到函数文件夹“cd functions”
    2. sudo npm install es6-promise --save
    3. 浏览到函数/node_modules/firebase-admin/lib/firebase-namespace.js
    4. 在上面添加这个

    var Promise = require('es6-promise').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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 2020-02-29
      • 2021-11-08
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多