firebase.database 不是函数 [英] firebase.database is not a function

查看:22
本文介绍了firebase.database 不是函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从我的 ionic 项目中从较早的 firebase 版本升级到最新版本.我按照教程进行升级.在此页面的第 4 步中,我停留在最后一条语句 firebase.database().ref(); 上.

错误信息

TypeError: firebase.database 不是函数

下面是我的代码.请帮忙.

<预><代码>...//初始化 Firebasethis.config = {apiKey: "some-api-key",authDomain: "myapp.firebaseapp.com",databaseURL: "https://myapp.firebaseio.com",storageBucket: "project-somenumber.appspot.com",};...this.authWithOAuthPopup = 函数(类型){var deferred = $q.defer();控制台日志(服务配置);//--->对象 {apiKey: "some-api-key", authDomain: "myapp.firebaseapp.com", databaseURL: "https://myapp.firebaseio.com", storageBucket: "project-somenumber.appspot.com"}firebase.initializeApp(service.config);控制台日志(火力基地);//--->对象 {SDK_VERSION:3.0.5",内部:对象}service.rootRef = firebase.database().ref();//new Firebase("https://rsb2.firebaseio.com");--->我在这一行出现错误TypeError: firebase.database is not a function"service.rootRef.authWithOAuthPopup(类型,功能(错误,authData){如果(错误){service.authError = 错误;开关(错误代码){案例INVALID_EMAIL":console.log("指定的用户账号邮箱无效.");休息;案例无效密码":console.log("指定的用户账号密码不正确.");休息;案例无效用户":console.log("指定的用户账号不存在.");休息;默认:console.log("登录用户时出错:", error);}deferred.resolve(service.authError);} 别的 {service.authData = authData;console.log("已通过payload成功验证:", authData);deferred.resolve(service.authData);}返回 deferred.promise;});返回 deferred.promise;}var service = this;

更新

添加最新的数据库库后,这个问题就解决了.

在这里更新我的代码

this.authWithOAuthPopup = 函数(类型){var deferred = $q.defer();控制台日志(服务配置);firebase.initializeApp(service.config);控制台日志(火力基地);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) {如果(结果.凭证){//这会给你一个 Facebook 访问令牌.您可以使用它来访问 Facebook API.var token = result.credential.accessToken;控制台日志(结果);//...}//登录用户信息.var user = result.user;}).catch(函数(错误){//在这里处理错误.var errorCode = error.code;var errorMessage = error.message;//使用的用户帐户的电子邮件.var email = error.email;//使用的 firebase.auth.AuthCredential 类型.var credential = error.credential;//...});返回 deferred.promise;}

解决方案

我在使用 Ionic 时遇到了这个问题,结果发现我在使用最新的 Firebase 客户端时没有包含所有内容.如果您已将 Firebase 作为 firebase-app 包含在内,则需要分别需要 Database 和 Auth 部分,因为以这种方式包含 Firebase 时它们不会捆绑在一起.

在包含 firebase-app.js

后,将以下内容添加到您的 index.html

<script src=https://www.gstatic.com/firebasejs/3.1.0/firebase-database.js"></script>

显然您不需要使用 CDN,您可以使用 bower(可能是使用 Ionic 的首选方式)或 NPM 使用 Browserify.

//浏览器设置var firebase = require('firebase/app');require('firebase/auth');require('firebase/数据库');

以下摘自 Firebase Web 设置文档

<块引用>

您可以通过仅包含您需要的功能来减少应用使用的代码量.可单独安装的组件是:

<块引用>

firebase-app - 核心 firebase 客户端(必需).
firebase-auth - Firebase 身份验证(可选).
firebase-database - Firebase 实时数据库(可选).
firebase-storage - Firebase 存储(可选).

<块引用>

从 CDN 中包含您需要的各个组件(首先包含 firebase-app)

I am trying to upgrade from earlier firebase version to the latest in my ionic project. I followed this tutorial for upgrade. In step 4 from this page I am stuck on the last statement firebase.database().ref();.

Error message

TypeError: firebase.database is not a function

Below is my code. Kindly help.

...

// 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;

Update

After adding latest database library this questions problem is solved.

Updating my code here

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;
}

解决方案

I ran into this with Ionic and it turned out that I wasn't including everything when using the latest Firebase Client. If you've included Firebase as firebase-app, then the Database and Auth pieces need to be required separately since they aren't bundled when including Firebase in this way.

Add the following to your index.html after you include 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>

Obviously you don't need to use the CDN, you could use bower (probably the preferred way with Ionic) or NPM with Browserify.

// Browserify Setup
var firebase = require('firebase/app');
require('firebase/auth');
require('firebase/database');

Snippet below taken from the Firebase Web Setup Docs

You can reduce the amount of code your app uses by just including the features you need. The individually installable components are:

firebase-app - The core firebase client (required).
firebase-auth - Firebase Authentication (optional).
firebase-database - The Firebase Realtime Database (optional).
firebase-storage - Firebase Storage (optional).

From the CDN, include the individual components you need (include firebase-app first)

这篇关于firebase.database 不是函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆