2016-12-04 1 views
0

을 정의되지 않은 I이 오류 메시지가 건너 온 : 내 지역 환경에중포 기지 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 버전 : 3.10.0; 노드 버전 : 7.1.0; v8 버전 : 5.4.500.36; firebase-admin 버전 : 4.0.3; –

답변

3

나는이 문제를 해결할 수 있었다. 내 경우를 들어

  1. 나는 내가 중포 기지-관리 모듈에 대한 모든 수정 사항을 제거 : 그냥 경우에 사람이 같은 문제로 실행하면, 여기에 내가 그것을 해결하는 방법 단계입니다.

  2. 설치하지 않은 경우 "es6-promise"를 설치하십시오.

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

공지 사항 우리가하지 않는 :

  • 이 "server.js"파일에 다음 줄을 추가 (NPM ES6-약속 --save 설치) polyfill()의 결과를 임의의 변수에 할당합니다. polyfill() 메서드는 호출 될 때 전역 환경 (이 경우 Promise 이름)을 패치합니다.

  • 0

    내가 firebase init하자마자이 문제가 발생했습니다. 생성 된 스크립트에서 코드를 변경하거나 추가하지 않았습니다. 나는이 문제를 해결했고으로 배포 할 수 있었다 : "CD 기능"기능 폴더에

  • sudo는 NPM 기능에 ES6-약속을 --save
  • 찾아보기를 설치/node_modules/중포 기지를가는

    1. -admin/lib 디렉토리/중포 기지-namespace.js
    2. 최고

    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;