问题
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