Cloud functions onUpdate: Cannot read property 'forEach' of undefined

前端 未结 2 561
予麋鹿
予麋鹿 2021-01-29 04:21

Now I am trying to update the picture in my project. I could update the picture url in the cloud fire store. But also I want to delete the previous picture from the cloud storag

相关标签:
2条回答
  • 2021-01-29 04:28

    Independently of the forEach problem, your code cannot work: you try to pass an URL to the file() method of a Bucket, while you should pass the name of the file in this bucket.

    One solution would be to save, in another field of the Product doc, the name of the file.

    Then, as Cleanbeans explained, you don't need to use forEach, since in your Cloud Function, you are treating only one Firestore document.

    Just use the other field containing the file name and adapt Cleanbeans' solution as follows:

    exports.onProductUpdate = functions.firestore.document('Product/{productId}').onUpdate(async(snap, context) => {
        const deleteFileName = snap.before.data().fileName;
        const bucket = admin.storage().bucket();
    
        await bucket.file(deleteFileName).delete())
    
        return null;   // Don't forget to return null for example (or an Object or a Promise), to indicate to the platform that the CF can be cleaned up. See https://firebase.google.com/docs/functions/terminate-functions
    
    });
    
    0 讨论(0)
  • 2021-01-29 04:50

    onUpdate is only looking at one document and it would appear from your screenshot of your doc that snap.before.data().sample is a string where your code is treating it like an object, or even a query snapshot?

    Unless I've misunderstood, does this is correct your code?

    const functions = require('firebase-functions');
    const admin = require('firebase-admin');
    admin.initializeApp();
    
    const Firestore = admin.firestore;
    const db = Firestore();
    
    
    
    exports.onProductUpdate = functions.firestore.document('Product/{productId}').onUpdate(async(snap, context) => {
        const deletePost = snap.before.data().sample;
        const bucket = admin.storage().bucket();
    
        await bucket.file(deletePost).delete();
    
        return null;   // See https://firebase.google.com/docs/functions/terminate-functions
     
    });
    
    0 讨论(0)
提交回复
热议问题