Как обрабатывать ошибки при неудачной загрузке файла - PullRequest
0 голосов
/ 23 апреля 2020

Я реализовал REST API в узле Express. У него есть маршрут, по которому файл / с загружается в AWS S3 Bucket.

const AWS = require('aws-sdk');
const router = require("express").Router();
const uniqueId = require('uuid/v4');
const multer = require('multer');
const multerS3 = require('multer-s3');
const Image = require('../models/file_model');

let upload = multer({
    storage: multerS3({
        s3: s3,
        bucket: process.env.AWS_S3_BUCKET,
        acl: 'public-read',
        metadata: function (req, file, cb) {
            console.log(file);
            cb(null, {fieldName: file.fieldname});
        },
        key: function (req, file, cb) {
            let file_name = file.originalname;
            file_name = file_name.split('.');
            let extension = file_name[file_name.length-1];
            cb(null,  "shop/"+uniqueId()+"."+extension)
        }
    })
});

router.post('/shop/:shop_id', upload.array('image', 5), async (req, res, next)=> {
    let shop_id = req.params.shop_id;
    try{
        for (let i = 0; i < req.files.length; i++) {
            // save the file name to database
             await image_obj.saveUploadUrl(req.files[i].location,shop_id)
        }
        await res.json({"msg": req.files.length})
    }catch (e) {
        await res.status(502).json({"msg": e.name + " " + e.message})
    }

});

Но если при загрузке файла происходит сбой (из-за недоступности сети и т. Д. c.), Я хочу знать, как обработать ошибку. назначение подписи asyn c (err, req, res, next) не работает, поскольку это приводит к неисполнению функции.

...