我是NodeJS的新手,并且正在尝试为Firebase的Cloud Functions编写下一个方法。使用NodeJS从数据库中删除对象时,从存储中删除文件的Firebase功能
我想实现:
- 当用户从火力地堡DB一个照片对象的功能应该被触发;
- 代码应该从对应于Photo obj的存储中移除文件对象。
这些是我的火力地堡DB结构:
照片/ {userUID}/{photoUID}
{
"dateCreated": "2017-07-27T16:40:31.000000Z",
"isProfilePhoto": true,
"isSafe": true,
"uid": "{photoUID}",
"userUID": "{userUID}"
}
而且火力地堡存储格式:
照片/ {userUID }/{photoUID} .png
和的NodeJS代码,我使用:
const functions = require('firebase-functions')
const googleCloudStorage = require('@google-cloud/storage')({keyFilename: 'firebase_admin_sdk.json' })
const admin = require('firebase-admin')
const vision = require('@google-cloud/vision')();
admin.initializeApp(functions.config().firebase)
exports.sanitizePhoto = functions.database.ref('photos/{userUID}/{photoUID}')
.onDelete(event => {
let photoUID = event.data.key
let userUID = event.data.ref.parent.key
console.log(`userUID: ${userUID}, photoUID: ${photoUID}`);
if (typeof photoUID === 'undefined' || typeof userUID === 'undefined') {
console.error('Error while sanitize photo, user uid or photo uid are missing');
return
}
console.log(`Deleting photo: ${photoUID}`)
googleCloudStorage.bucket(`photos/${userUID}/${photoUID}.png`).delete().then(() => {
console.log(`Successfully deleted photo with UID: ${photoUID}, userUID : ${userUID}`)
}).catch(err => {
console.log(`Failed to remove photo, error: ${err}`)
});
});
当我运行它,我得到了一个错误:“ApiError中:未找到”
我觉得代码的这些部分是在导致问题的一个:
googleCloudStorage.bucket(`photos/${userUID}/${photoUID}.png`).delete()
预先感谢支持和耐心。
@Jay我做了必要的修改。 –