я строю остальные api-сервер, используя node.js. сервер для создания поста. Я использую Multer для загрузки файлов / изображений, и некоторые проверки на стороне сервера с использованием валидатора. ошибка Error: EBUSY: resource busy or locked, unlink 'some-path'
сохраняется при каждой попытке отправить несколько запросов, первый запрос будет успешным, хотя следующий запрос вызовет эту ошибку.
Вот мой код в моем контроллере
module.exports.postSavePost = async (req, res, next) => {
try {
const image = req.file;
if (!image) {
return res.status(422).json({message: 'Please provide a valid image'})
}
const imagePath = image.path;
const errors = validatePost(req.body);
console.log(errors);
if (errors.length > 0) {
// delete the uploaded images
await fs.unlink(imagePath, (err) => {
if (err) throw err;
});
return res.status(422).json({
message: 'Invalid inputs',
errors: errors
});
}
res.status(200).json({message: 'success'});
} catch (e) {
next(e); // global error handler express
}
}
Это мой код в server.js, я использую multer для загрузки файлов
// MULTER FILE UPLOAD
const fileStorage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'images');
},
filename: (req, file, cb) => {
cb(null, Date.now() + '-' + file.originalname);
}
});
const fileFilter = (req, file, cb) => {
if (
file.mimetype === 'image/png' ||
file.mimetype === 'image/jpg' ||
file.mimetype === 'image/jpeg'
) {
cb(null, true);
} else {
cb(null, false);
}
}
app.use(multer({storage: fileStorage, fileFilter: fileFilter}).single('image'));
Моя цель - удалить загруженный файл / изображение, если проверки для других полей, таких как заголовок и содержимое, не пройдены. первый запрос пары успешно удаляет загруженный файл.