获取下载URL使用Firebase不断抛出错误``未定义XMLHttpRequest''

时间:2019-04-14 00:54:08

标签: node.js firebase firebase-realtime-database firebase-storage

当尝试获取刚上传到存储中的图像的downloadURL时,我一直收到“未定义XMLHttpRequest”的消息。对这里发生的事情有什么想法吗?我可以检索元数据,但是该方案中未列出图片网址:/

节点:

import firebase, { storage } from './firebase';
const serviceAccount = require('./serviceAccountKey.json');
const admin = require('firebase-admin');
const app = express()
const dbUrl = "https://authentication.firebaseio.com"

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: dbUrl,
  storageBucket: 'authentication.appspot.com'
});

//Initalize bucket
const bucket = admin.storage().bucket();

......
bucket.upload(imageUrl).then(result => {
        const file = result[0];
        return file.getMetadata();
      }).then(results => {
          const ref = storage.ref('users/' + userRecord.uid + '/image').downloadURL();
          console.log(ref)
          //const metadata = results[0];
          //console.log('metadata=', metadata.mediaLink);
          //firebase.database().ref('users/' + userRecord.uid + '/image').set(metadata.mediaLink);
      }).catch(error => {
          console.error(error);
      });
    })
    .catch(function(error) {
      console.log("Error creating new user:", error);
    });

存储: enter image description here

3 个答案:

答案 0 :(得分:1)

大多数不支持将JavaScript的Firebase客户端SDK用于NodeJS。这解释了您的错误-XMLHttpRequest在浏览器上本机可用,但在节点中不可用。如果要运行访问Firebase和Google Cloud资源的服务器端代码,则应使用服务器SDK。

Firebase通过Firebase Admin SDK提供服务器SDK,该SDK在节点上完全可用。对于Cloud Storage访问,Admin SDK重新打包了Google Cloud提供的现有Cloud Storage SDK。

请注意,Google Cloud SDK for Cloud Storage没有提供“下载URL”的概念。它具有类似的使用方式,称为“签名URL”。

答案 1 :(得分:0)

我发现使用全局XMLHttpRequest就足够了,所以我做到了

npm install xhr2

并添加

global.XMLHttpRequest = require("xhr2");

到文件顶部。它对我有用。

答案 2 :(得分:0)

npm install xhr2对我有用。 请注意,一般来说,这不是一个好习惯。 如果您使用的是Firebase Cloud Storage,则应在nodejs级别(服务器)上使用admin sdk(对于服务器),而不要使用firebase客户端sdk。这意味着您将使用谷歌云功能。