Я реализовал 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) не работает, поскольку это приводит к неисполнению функции.