Following this example, I keep getting the error:
TypeError: firebase.storage is not a function
From this line in my code:
google-cloud
. The references and guides for Firebase and Google Cloud do not reflect this as of today.To create a single Node.js project which uses Firebase and Google Cloud. Why? Firebase has a useful database, among other features, and Google Cloud allows cloud file storage and retrieval.
Create Firebase and Google Cloud (Storage) projects.
Using npm, install firebase-admin and google-cloud in Node.js
project.
Note 1: I used the admin SDK, so after creating the Firebase project, you'll need to go to:
Node.js
> [Copy/paste the generated code into
your project] > [click "Generate New Private Key"] > [download the
generated json
to preferred location] > [replace
"path/to...AccountKey.json"
with the path to the key you just
generated]Note 2: the generated key can be reused in firebase or google-cloud credentials.
Once your project is created, import the firebase-admin sdk:
The code should look like this, but filled with your info:
var admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.cert("/path/to/generated/json/here.json"),
databaseURL: "database-url-from-firebase"
});
To find the databaseURL, go to 'Storage' in Firebase, and note the URL starting with gs:
and copy/paste it the the value field of databaseURL.
Next, get a reference to the database you can use:
var db = admin.database();
var ref = db.ref("/");
console.log('DB ref: ' + ref); //just to debug, if undefined, there's a problem.
To learn more about reading/writing to the database, follow Firebase's own documentation.
After creating a project on Google Cloud, add billing information; buckets cannot be used without billing info.
In your index.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'
});
Now you can send a file to your storage by:
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);
}
});
If the file is visible in Firebase Storage and Google Cloud Storage, you're done!