удалить файл изображения из серверной части с помощью узла File System и MongoDB - PullRequest
0 голосов
/ 04 августа 2020

Мне нужно удалить файл изображения из моего бэкэнда, папка: / uploads. Когда я вызываю функцию deleteProduct, она удаляет продукт из базы данных, но изображение продукта все еще находится в папке.

deleteProduct: (req, res) => {
        let productId = req.params.id;
        Product.findById(productId, (err, res) =>{
            var imageResponse = res.image; 
            console.log(imageResponse); 
        });
        //console.log(imageResponse);
        //fs.unlink('./uploads' + imageResponse );

Когда я пытаюсь получить доступ к imageResponse вне findById, консоль выводит: «imageResponse» не определен. Затем мне нужно удалить этот файл с помощью fs. Я не уверен, правильно ли я написал функцию отмены связи. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Для fs.unlink

Убедитесь, что:

  1. Включено fs = require('fs')?
  2. Используется __dirname?
  3. Включить расширение файла (.png, .jpg, .jpeg)?
const fs = require('fs');

fs.unlink(__dirname + '/uploads' + imageResponse + ".png", (err) => {
  if (err) throw err;
  console.log('successfully deleted file');
});

Если ответ изображения не определен

Вы этого не сделали t предоставить информацию о конструкторе продукта, но я предполагаю, что Product.findById является асинхронным. Возможно, вам потребуется использовать асинхронную c функцию

const fs = require('fs');

async function deleteProduct (req, res) => {
        let productId = req.params.id;
        Product.findById(productId, (err, res) =>{
            var imageResponse = res.image; 
            console.log(imageResponse);
            fs.unlink(__dirname + '/uploads' + imageResponse + ".png", (err) => {
              if (err) throw err;
              console.log('successfully deleted file');
            });
        });
}

Дальнейшее чтение: Node File API: https://nodejs.org/api/fs.html Асинхронные c функции: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

0 голосов
/ 04 августа 2020

Наконец, похоже, все заработало, файл успешно исчез из папки, я все еще открыт для советов, спасибо.

deleteProduct: (req, res) => {
        let productId = req.params.id;
        Product.findById(productId, (err, res) =>{
            if(err) return res.status(500).send({message: 'Error'});
            fs.unlink('./uploads/' + res.image, (err) => {
                if(err) return res.status(500).send({message: 'Error'});
            })
}); 
...