2016-12-04 53 views
0

我碰到这个错误信息试图部署火力节点应用到虚拟专用服务器时传来:火力地堡的NodeJS的ReferenceError:承诺没有定义

/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){ 
    .... 
}); 

与我的当地环境没有问题读取火力的内容,永远不会有它的“然后”被称为虚拟服务器上。

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

+0

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

回答

3

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

  1. 对于我而言,我删除了所有我的火力管理员模块所做的修改。

  2. 如果你还没有安装“es6-promise”。 (NPM安装ES6-承诺--save)

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

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

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

0

我一旦遇到firebase init就遇到了这个问题。我没有更改或添加生成的脚本中的任何代码。我没有解决这个问题,并能够通过部署:

  1. 将函数文件夹“CD功能”
  2. 须藤NPM安装ES6-承诺--save
  3. 浏览的功能/ node_modules /火力-admin/lib目录/火力-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;