当前位置: 首页 > 知识库问答 >
问题:

firebase.storage不是函数

梁丘波鸿
2023-03-14

在这个示例中,我不断得到错误:

 TypeError: firebase.storage is not a function

从我的代码中的这一行:

var storageRef = firebase.storage().ref();

(当我尝试从firebase的npm站点链接的存储指南中初始化存储时,我会得到相同的错误。)

在我的节点中。js项目,我包括以下库:

  • const firebase=require('firebase')
  • var admin=require('firebase-admin')
  • const fs=require('fs')

到目前为止,我已经成功地读写了firebase数据库,用< code > var db = admin . database()然后用< code>var ref = db.ref("/")创建了对数据库的引用...所以我知道我已经正确地配置了Firebase和firebase-database。但是我被困在< code >存储上,并且已经尝试了< code>admin.storage()。ref()和< code>firebase.storage()。ref()和< code>firebase.storage()。ref("/")并显示相同的错误消息

我也试过:

var storage = firbase.storage();
var storageRef = storage.ref();

const app = firebase.initializeApp(config);
var storage = app.storage();

以及< code>ref()的void参数< code>()和< code >“/”...但是有同样的信息,却无济于事。

我正在使用:

  • “firebase”:“^3.6.4”
  • “firebase管理员”:“^4.0.4”
  • 节点。js:v6.9.1

要成功创建对存储的引用,我必须执行哪些操作?

共有3个答案

冀景明
2023-03-14
  1. Firebase Storage 不再与 Node.js 一起使用,因此所有文档对于 Node.js都毫无用处。相反,使用谷歌云。Firebase和Google Cloud的参考和指南截至今天尚未反映这一点。
  2. 与Firebase不同,谷歌云需要花钱,即使是小型项目也是如此。
  3. 就我而言,我使用的是firebase-admin SDK,因此我目前不必弄乱用户身份验证。

以创建单个节点。使用Firebase和Google Cloud的js项目。为什么?Firebase有一个有用的数据库和其他功能,Google Cloud允许云文件存储和检索。

创建Firebase和Google云(存储)项目。

使用npm,在节点中安装firebase admingoogle cloud。js项目。

注1:我使用了管理SDK,因此在创建Firebase项目后,您需要转到:

    < li >设置(档位)

注意2:生成的密钥可以在firebase或google-cloud凭证中重用。

创建项目后,导入 firebase-admin sdk:

代码应该是这样的,但是填充了您的信息:

var admin = require("firebase-admin");
admin.initializeApp({
  credential: admin.credential.cert("/path/to/generated/json/here.json"),
  databaseURL: "database-url-from-firebase"
});

要查找数据库URL,请转到Firebase中的“存储”,并记下以gs:开头的URL,然后将其复制/粘贴到数据库URL的值字段中。

接下来,获取对可以使用的数据库的引用:

var db = admin.database();
var ref = db.ref("/");
console.log('DB ref: ' + ref); //just to debug, if undefined, there's a problem.

要了解有关读取/写入数据库的更多信息,请遵循 Firebase 自己的文档。

在Google Cloud上创建项目后,添加计费信息;没有计费信息,无法使用存储桶。

  1. 滚动菜单(水平3栏),单击“存储”,然后单击“启用计费”。是的,您添加了计费信息,现在您需要为该项目的存储桶启用它。
  2. 您应该会看到您的Firebase项目中已经存在一个存储桶。
  3. 再次点击菜单(3栏图标),然后

在您的索引中.js

var gcloud = require('google-cloud');
var gcs = gcloud.storage({
  projectId: 'paste-that-project-id-here',
  keyFilename: 'paste-that-path-to-the-previously-downloaded-json-from-firebase-here'
});

现在,您可以通过以下方式将文件发送到存储:

var bucket = gcs.bucket('bucket_name');
var remoteFile = bucket.file('somefile-inThisCaseASong.mp3');
var localFilename = '/Users/you/Music/somefile-inThisCaseASong.mp3';
bucket.upload(localFilename, function(err, file) {
  if (!err) {
    console.log('somefile-inThisCaseASong.mp3 is now in your bucket.');
  } else {
    console.log('Error uploading file: ' + err);
  }
});

如果该文件在Firebase Storage和Google Cloud Storage中可见,则大功告成!

柴文林
2023-03-14

已弃用,请参阅下文:

根据这个答案,不是firebase存储,而是在节点中。js,googlecloudpackage存储应该使用,这个答案似乎应该证实这一点。代码示例:

npm i --save google-cloud

然后:

const gcloud = require('google-cloud')

const storage = gcloud.storage({
    projectId: '<projectID>',
    keyFilename: 'service-account-credentials.json',
});

const bucket = storage.bucket('<projectID>.appspot.com')

截至2018年,这是正确答案:

或者只使用包的存储部分:

npm install --save @google-cloud/storage

然后:

var storage = require('@google-cloud/storage')

还可以查看文档了解更多信息。

尚楚
2023-03-14

我也面临同样的问题。在我的例子中,除了Firebase core之外,我还需要包括存储模块。

import firebase from 'firebase/app';
import 'firebase/storage';  // <----

firebase.initializeApp({
  ...
});
const storageRef = firebase.storage().ref();

(npm Firebase v5.0.4)

 类似资料:
  • 问题内容: 当我试图在React版本15.2.0中使用这两个函数时,我在代码中发现了一个问题,尽管如此,我找到了一种解决方法,但是我想知道是否有更好的解决方案。 因此,每当我尝试运行index.html文件时,都不会显示任何内容,但是控制台会出现第一个错误: React.render不是function 。我发现发生这种情况是因为新版本的React需要使用react-dom,即 现在问题已解决,但

  • 问题内容: 我正在为无法解决的错误而烦恼。我有以下内容; JSON格式 和下面的jQuery 但是我收到一个错误,认为map.data未定义为函数?看着它,我不知道什么是行不通的,因为我已将其从以前使用的代码复制到新项目中。唯一不同的是JSON源。上一个没有[]括号之前的部分。这是什么让我失望吗? 问题答案: 对象,在JavaScript没有方法,它只是为数组,。 因此,为了使您的代码正常工作,请

  • 问题内容: 我有这段代码可用于从Arduino接收数据,但我想将数据发送回Arduino并在客户端页面上获得响应。我添加了侦听功能,但是从客户端页面发送数据时却不断获取信息。 test.js 问题答案: 您的价值不是应有的价值。 通常的做事方式是这样的: 但是我猜你的价值是这样的: 那不是同一回事。那就是模块句柄。但是,当您这样做时: 然后,是一个socket.io实例。您可以将侦听器绑定到实例,

  • 问题内容: 我正在尝试使用来运行任何按钮的功能。我在Firebug中遇到错误 document.getElementByClass不是函数 这是我的代码: 问题答案: 您可能是想(然后从结果节点列表中获取第一项): 您可能仍然会收到错误 不是功能 但是,在较旧的浏览器中,如果需要支持那些较旧的浏览器,则可以提供后备实现。

  • 编辑:阅读问题末尾的部分! 我的服务代码: 在我的组件中,我有这个提交功能: 这里和这里都有类似的错误。答案总是包含rxjs函数,但是我这样做了,所以我不太确定,为什么会出现这个错误。 编辑: 因此,实际的问题不是这个函数,而是主应用程序中我的路线前缺少“/”。js文件。解决了这个问题之后,问题就消失了。

  • 问题内容: 我有以下组件,该组件维护在特定元素上触发事件时更新的状态,并且在更新状态时将其作为道具传递给另一个组件。我目前正在尝试为什么我得到以下错误“ this.setState不是函数”,它很可能没有绑定到正确的上下文。但是我不确定,我这样做正确吗? 编辑: 我只是意识到上下文会在“onreadyStateChange”函数时发生更改,所以我在searchGif中做了以下操作 问题答案: 您正