Javascript 云函数onUpdate:无法读取属性';forEach&x27;未定义的
现在我正在尝试更新我的项目中的图片。 我可以在CloudFire商店中更新图片url。 但我也想使用firebase云函数从云存储中删除上一张图片 我想要实现的是,当我上传新图片时,从云存储中删除以前的图片 这是我的数据结构。 我在“产品”集合中有“样本”字段。当“示例”字段中的图片更新时,我想删除云存储中的原始图片 但我在云函数日志控制台中出错 TypeError:无法读取未定义的属性“forEach” 这是我的云函数代码Javascript 云函数onUpdate:无法读取属性';forEach&x27;未定义的,javascript,node.js,firebase,google-cloud-functions,google-cloud-storage,Javascript,Node.js,Firebase,Google Cloud Functions,Google Cloud Storage,现在我正在尝试更新我的项目中的图片。 我可以在CloudFire商店中更新图片url。 但我也想使用firebase云函数从云存储中删除上一张图片 我想要实现的是,当我上传新图片时,从云存储中删除以前的图片 这是我的数据结构。 我在“产品”集合中有“样本”字段。当“示例”字段中的图片更新时,我想删除云存储中的原始图片 但我在云函数日志控制台中出错 TypeError:无法读取未定义的属性“forEach” 这是我的云函数代码 const functions = require('fireba
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;
let deletePromises = [];
const bucket = admin.storage().bucket();
deletePost.images.forEach(image => {
deletePromises.push(bucket.file(image).delete())
});
await Promise.all(deletePromises)
})
我想修复此错误。onUpdate只查看一个文档,从文档的屏幕截图中会显示
snap.before.data()。示例是一个字符串,代码将其视为对象,甚至是查询快照
除非我误解了,否则这是正确的代码吗
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
});
与forEach
问题无关,您的代码无法工作:您尝试将URL传递给Bucket的方法,而您应该传递此Bucket中的文件名
一种解决方案是在产品
文档的另一个字段中保存文件名
然后,正如Cleanbeans所解释的,您不需要使用forEach
,因为在您的云函数中,您只处理一个Firestore文档
只需使用另一个包含文件名的字段,并按照如下方式调整Cleanbeans的解决方案:
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
});
这意味着deletePost.images
未定义-console.log(deletePost.images)
输出是什么?@Renaud感谢您的回复。谢谢您的回答,我可以解决这个问题。