Я хотел удалить файл из хранилища при удалении узла данных из базы данных реального времени. имя удаляемого файла берется перед удалением. Имя файла сохраняется в дочернем узле с именем «imageTitle». Код работает нормально до реализации кода удаления файла. Я имею в виду, что узлы удаляются идеально.
Когда я реализую код удаления файла, все остальное не работает, но ошибок нет. Код после удаления файла не работает. Я не знаю, почему.
Это для окончательного проекта Academi c.
В папке есть папка с именем images, и файл, который мне нужно удалить, находится там. Имя файла взято у дочернего узла, который должен быть удален в базе данных реального времени с именем imageTitle:
'use strict';
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.changetime = functions.database.ref('/posts/{pushId}')
.onCreate((snapshot, context) => {
const editDate = Date.now()
datas = snapshot.val();
return snapshot.ref.update({editDate})
})
const CUT_OFF_TIME = 1 * 60 * 1000;
/**
* This database triggered function will check for child nodes that are older than the
* cut-off time. Each child needs to have a `timestamp` attribute.
*/
exports.deleteOldItems = functions.database.ref('/posts/{pushId}').onWrite(async (change,
context) => {
const ref = change.after.ref.parent; // reference to the parent
const now = Date.now();
const id = context.params.pushId;
const cutoff = now - CUT_OFF_TIME;
const oldItemsQuery = ref.orderByChild('createdDate').endAt(cutoff);
const snapshot = await oldItemsQuery.once('value');
const getImageTitle = admin.database().ref(`/posts/${id}/imageTitle`).once('value');
return getImageTitle.then(imageTitle => {
console.log('post author id', imageTitle.val());
const imageName = imageTitle.val();
const filePath = 'images/' + imageName;
const path = `images/${imageName}`;
const bucket = app.storage().bucket();
return bucket.file(path).delete().then(() =>{
console.log(`File deleted successfully in path: ${imageName}`)
/* The problem is here. the code doesn't work after file.delete function. no errors. but doesn't work
if I remove that piece of code the other codes work fine. I mean the realtime database nodes get deleted and updated perfectly */
const updates = {};
snapshot.forEach(child => {
updates[child.key] = null;
if(updates[child.key] == null){
admin.database().ref(/post-likes/+id).remove();
}
})
return ref.update(updates);
});
});
[my storage looks like this][1]});
В корзине есть папка с именем images, и файл, который мне нужно удалить, находится в там. Имя файла берется из дочернего узла, идентификатор которого будет удален в базе данных реального времени imageTitle:
введите описание изображения здесь