Как добавить слушателя для удаления функции в MongoDB? - PullRequest
1 голос
/ 07 марта 2020

Я пытаюсь «прослушать» удаление события в схеме MongoDB с именем Post . Как только пользователь удалит одно сообщение с одним изображением в AmazonWeb Cloud, я должен удалить это изображение из облака. Моя проблема в том, что этот слушатель не работает, возможно, он устарел; Мне нужна альтернатива этому коду.

Вот код схемы ( PostSchema ):


//imports
const mongoose = require('mongoose');
const aws = require('aws-sdk');
const fs = require('fs');
const path = require('path');
const { promissify } = require('util');

//using AWS's lib
const s3 = new aws.S3();

//Schema declaration
const PostSchema = new mongoose.Schema({
    name: String,
    size: Number,
    key: String,
    url: String,
    createdAt: {
        type: Date,
        default: Date.now
    }
});

//listener to all 'save' events (it works)
PostSchema.pre('save', function() {
    if(!this.url) {
        this.url = `${process.env.APP_URL}/files/${this.key}`
    }
});

//LISTENER THAT NOT WORKS
PostSchema.pre('remove', function() {
    //if the storage type defined is AWS, delete image from AWS
    //else, delete from local storage
    if(process.env.STORAGE_TYPE == 's3') {
        return s3.
            deleteObject({
                Bucket: 'upload-example-nodeapp',
                Key: this.key
            })
            .promise()
    } else {
        return promissify(fs.unlink)(
            path.resolve(__dirname, '..', '..', 'tmp', 'uploads', this.key)
        );
    }
});

1 Ответ

1 голос
/ 08 марта 2020

Если вы используете что-то вроде Model.remove для удаления документа, вы должны использовать опцию { query:true }

schema.pre('remove', { query: true }, function() {
  console.log('Removing!');
});

по умолчанию, она использует опцию { document: true }, и ловушка срабатывает только при использовании doc.remove. Это все написано в документации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...