2016-12-04 48 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;