MERN, удаление загруженных изображений - PullRequest
0 голосов
/ 19 сентября 2019

Я создаю приложение MERN, в котором пользователь может загружать продукты, включая сведения о них, а также изображения в виде изображений с помощью multer.

Детали хранятся в базе данных mongo, а изображения хранятся в реакции / клиенте / внешнем интерфейсе.Я могу нормально выполнять все грубые операции с базой данных, но хотел бы иметь возможность удалять изображения, хранящиеся во внешнем интерфейсе.

const router = express.Router();
const multer = require("multer");

const storage = multer.diskStorage({
    destination: function(req, file, cb) {
        cb(null, "./client/src/components/prodImg/");
    },
    filename: function(req, file, cb) {
        cb(null, Date.now() + file.originalname);
    }
});

const upload = multer({ storage: storage });

//Init in Prod model
const Prod = require("../../models/Prod");

// @route   GET api/prods
// @desc    Get all Prod
// @access  public
router.get("/", (req, res) => {
    Prod.find()
        .sort({ date: -1 })
        .then(prods => res.json(prods));
});

// @route   POST api/prods
// @desc    Add a Prod
// @access  public
router.post(
    "/",
    upload.fields([
        {
            name: "img1",
            maxCount: 1
        },
        {
            name: "img2",
            maxCount: 1
        },
        {
            name: "img3",
            maxCount: 1
        },
        {
            name: "img4",
            maxCount: 1
        }
    ]),
    (req, res) => {
        const newProd = new Prod({
            cat: req.body.cat,
            name: req.body.name,
            description: req.body.description,
            img1: req.files.img1[0].path,
            date: Date.parse(req.body.date)
        });

        try {
            newProd.img2 = req.files.img2[0].path;
        } catch {}
        try {
            newProd.img3 = req.files.img3[0].path;
        } catch {}
        try {
            newProd.img4 = req.files.img4[0].path;
        } catch {}

        newProd.save().then(prod => res.json(prod));
    }
);

// @route   DELETE api/prods
// @desc    Delete a Prod
// @access  public
router.delete("/:id", (req, res) => {
    Prod.findById(req.params.id)
        .then(prod => prod.remove().then(() => res.json({ success: true })))
        .catch(err => res.status(404).json({ success: false }));
});

...