我使用node.js构建一个REST API服务器。服务器用于创建帖子。我正在使用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'));
我的目标是,如果对其他字段(如标题和内容)的验证失败,则删除上传的文件/图像。第一个对请求成功删除了上传的文件。