我正在尝试从早期的Firebase版本升级到离子项目中的最新版本。我按照本教程进行了升级。在此页面的第4步中,我停留在最后一个语句上firebase.database().ref();。
firebase.database().ref();
错误信息
TypeError: firebase.database is not a function
下面是我的代码。请帮助。
... // Initialize Firebase this.config = { apiKey: "some-api-key", authDomain: "myapp.firebaseapp.com", databaseURL: "https://myapp.firebaseio.com", storageBucket: "project-somenumber.appspot.com", }; ... this.authWithOAuthPopup = function(type) { var deferred = $q.defer(); console.log(service.config); // ---> Object {apiKey: "some-api-key", authDomain: "myapp.firebaseapp.com", databaseURL: "https://myapp.firebaseio.com", storageBucket: "project-somenumber.appspot.com"} firebase.initializeApp(service.config); console.log(firebase); // ---> Object {SDK_VERSION: "3.0.5", INTERNAL: Object} service.rootRef = firebase.database().ref(); //new Firebase("https://rsb2.firebaseio.com"); ---> I am getting error on this line "TypeError: firebase.database is not a function" service.rootRef.authWithOAuthPopup(type, function(error, authData) { if (error) { service.authError = error; switch (error.code) { case "INVALID_EMAIL": console.log("The specified user account email is invalid."); break; case "INVALID_PASSWORD": console.log("The specified user account password is incorrect."); break; case "INVALID_USER": console.log("The specified user account does not exist."); break; default: console.log("Error logging user in:", error); } deferred.resolve(service.authError); } else { service.authData = authData; console.log("Authenticated successfully with payload:", authData); deferred.resolve(service.authData); } return deferred.promise; }); return deferred.promise; } var service = this;
更新资料
添加最新的数据库库后,此问题便解决了。
在这里更新我的代码
this.authWithOAuthPopup = function(type) { var deferred = $q.defer(); console.log(service.config); firebase.initializeApp(service.config); console.log(firebase); service.rootRef = firebase.database(); //.ref(); //new Firebase("https://rsb2.firebaseio.com"); var provider = new firebase.auth.FacebookAuthProvider(); firebase.auth().signInWithRedirect(provider); firebase.auth().getRedirectResult().then(function(result) { if (result.credential) { // This gives you a Facebook Access Token. You can use it to access the Facebook API. var token = result.credential.accessToken; console.log(result); // ... } // The signed-in user info. var user = result.user; }).catch(function(error) { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // The email of the user's account used. var email = error.email; // The firebase.auth.AuthCredential type that was used. var credential = error.credential; // ... }); return deferred.promise; }
我在Ionic遇到了这个问题,结果发现在使用最新的Firebase Client时,我并未包括所有内容。如果您将Firebase包括为firebase- app,则需要分别要求Database和Auth件,因为在以这种方式包括Firebase时,它们不是捆绑在一起的。
firebase- app
加入以下内容index.html后,将以下内容添加到您的内容中firebase-app.js
index.html
firebase-app.js
<script src="https://www.gstatic.com/firebasejs/3.1.0/firebase-auth.js"></script> <script src="https://www.gstatic.com/firebasejs/3.1.0/firebase-database.js"></script>
显然,您不需要使用CDN,可以将Bower(可能是Ionic的首选方式)或NPM与Browserify一起使用。
// Browserify Setup var firebase = require('firebase/app'); require('firebase/auth'); require('firebase/database');
以下摘录自Firebase Web设置文档
您只需添加所需的功能,就可以减少应用程序使用的代码量。可单独安装的组件是: firebase-app-核心firebase客户端(必需)。 firebase-auth-Firebase身份验证(可选)。 firebase-database-Firebase实时数据库(可选)。 firebase-storage-Firebase存储(可选)。 在CDN中,包含您需要的各个组件(首先包含firebase-app)
您只需添加所需的功能,就可以减少应用程序使用的代码量。可单独安装的组件是:
firebase-app-核心firebase客户端(必需)。 firebase-auth-Firebase身份验证(可选)。 firebase-database-Firebase实时数据库(可选)。 firebase-storage-Firebase存储(可选)。
在CDN中,包含您需要的各个组件(首先包含firebase-app)