抛出多个请求时,Node.js应用突然崩溃

时间:2019-05-30 00:24:59

标签: node.js multer

我使用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'));

我的目标是,如果对其他字段(如标题和内容)的验证失败,则删除上传的文件/图像。第一个对请求成功删除了上传的文件。

0 个答案:

没有答案