Get downloadURL keeps throwing error 'XMLHttpRequest is not defined' using Firebase

你说的曾经没有我的故事 提交于 2021-01-28 12:12:07

问题


I keep getting a "XMLHttpRequest is not defined" when attempting to get the downloadURL of images I just uploaded to storage. Any thoughts on what is going on here? I can retrieve the metadata, but the image url is not listed in the scheme :/

Node:

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

Storage:


回答1:


The Firebase client SDKs for JavaScript are mostly not supported for use on NodeJS. This explains your error - XMLHttpRequest is natively available on browsers but not in node. If you want to run server-side code that accesses Firebase and Google Cloud resources, you should be using the server SDKs.

Firebase provides server SDKs via the Firebase Admin SDK, which fully works on node. For Cloud Storage access, the Admin SDK repackages the existing Cloud Storage SDK provided by Google Cloud.

Note that there is no concept of a "download URL" provided by the Google Cloud SDK for Cloud Storage. It has something called a "signed URL" to use similarly.




回答2:


I figured out that using a global XMLHttpRequest was sufficient so, I did

npm install xhr2

and added

global.XMLHttpRequest = require("xhr2");

to the top of my file. It worked for me.




回答3:


npm install xhr2 worked for me. Please note, in general, this is not good practice. If you are working with Firebase Cloud Storage, at the nodejs level (server), you should be using the admin sdk (for servers), not the firebase client sdk. This means that you will be using google cloud functions.



来源:https://stackoverflow.com/questions/55671126/get-downloadurl-keeps-throwing-error-xmlhttprequest-is-not-defined-using-fireb

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!