我正在尝试从早期的firebase版本升级到ionic project中的最新版本。我按照this教程进行了升级。在此页面的第4步中,我停留在最后一条语句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;
}
答案 0 :(得分:24)
我使用Ionic遇到了这个问题,结果发现我在使用最新的Firebase客户端时没有包含所有内容。如果您将Firebase包含为SEd
,那么需要单独使用数据库和身份验证文件,因为在以这种方式包含Firebase时它们不会捆绑在一起。
在您加入firebase-app
index.html
firebase-app.js
显然你不需要使用CDN,你可以使用bower(可能是Ionic的首选方式)或NPM使用Browserify。
<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>
只需添加所需功能,即可减少应用使用的代码量。可单独安装的组件是:
firebase-app - 核心firebase客户端(必填) firebase-auth - Firebase身份验证(可选)。
firebase-database - Firebase实时数据库(可选)。
firebase-storage - Firebase存储(可选)。从CDN中,包括您需要的各个组件(首先包括firebase-app)
答案 1 :(得分:1)
聚会晚了一点,但是如果有人想知道angular的语法(或Ionic 4),只需将其添加到您的.module.ts文件中(请注意,如peterb所述,/ database导入)
import { AuthService } from './auth.service';
import { AngularFireAuthModule } from 'angularfire2/auth';
import { AngularFireDatabaseModule } from 'angularfire2/database';
@NgModule({
imports: [
AngularFireAuthModule,
AngularFireDatabaseModule,
AngularFireModule.initializeApp(environment.firebase),
],
providers: [
]
})
答案 2 :(得分:0)
在@ angular / firebase 5.1.2上也遇到了这个问题,在更新@ angular / cli和所有依赖项到最新版本时得到解决。
答案 3 :(得分:0)
我有相同的错误 -firebase.database不是函数- ,但是由于不同的情况,您只需要添加
上面以及包含Firebase配置的javascript链接。
您还可以尝试在脚本中使用 defer 属性,因为在加载页面元素之前,该属性不会加载脚本。
答案 4 :(得分:0)
对于在React-native中遇到类似错误(this._database.native.on不是函数)的人-
这将创建一个新的版本,错误应该消失了。
参考:Easier way to print in bold a string variable in matplotlib
答案 5 :(得分:0)
我通过在构造函数中提供url解决了这个问题 firebase.database('https://123.firebaseio.com')
答案 6 :(得分:0)
npm install --save firebase
那么:
require("firebase/database");
您需要通过 require()
添加您正在使用的所有 Firebase 产品,如上所示。
答案 7 :(得分:-1)
首先,确保您正在使用
<script src="https://www.gstatic.com/firebasejs/3.1.0/firebase.js"></script>
Firebase authWithOAuthPopup
在新版本中发生了一些变化。
现在您不使用ref来调用身份验证方法。您应该使用firebase.auth()
insted。
var auth = firebase.auth();
var provider = new firebase.auth.TwitterAuthProvider();
auth.signInWithPopup(provider).then(function(result) {
// User signed in!
var uid = result.user.uid;
}).catch(function(error) {
// An error occurred
});
答案 8 :(得分:-1)
使用
var firebase = require('firebase/app');
require('firebase/database');
答案 9 :(得分:-1)
您需要导入最新版本的 firebase-database 。你可以在cndjs上找到