首页 > 解决方案 > multer s3的上传功能出错但错误为空

问题描述

以下是上传功能的代码和使用它的路由。

 const upload = multer({
storage: multerS3({
  s3: s3,
  bucket: bucketName,
  metadata: function (req, file, cb) {
    cb(null, {fieldName: file.fieldname});
  },
  key: function (req, file, cb) {
    cb(null, file.originalname)
  }
})}).array('recfile',6);

router.post('/add',(req,res)=>{
try{
    let files = req.files;
    upload(req,res,function(error){
        if (err instanceof multer.MulterError) {
            return res.status.json({"error":error});
          } else if (err) {
            return res.status.json({"error":error});
          }
          return res.status(200).json({"Message":"No Multer Error"});
    }) 
    }catch(error){
        return res.status(400).json({"error":error,"message":"Error encountered here"});
    } //THIS IS BEING RETURNED 
    let image = [];
    for(let i = 0;i<files.length;i++){
        var params = { Bucket:bucketName, Key:files[i].originalname };
        s3.getSignedUrl('getObject',params, async function (err, data) {
            if (err) {
                return res.status(400).json({"error":err});
            }
            image.push(data);
        });
    }

productValidate(req.body).then((response)=>{
    // const fileStream = fs.createWriteStream(req.file.path);
    const newProduct = new Product({
        name:req.body.name,
        price:req.body.price,
        category:req.body.category,
        gender:req.body.gender,
        images:image,
        userId:"60b381e3f0a79c000447a4ad"
    })

    newProduct.save().then(async(response) =>{
        // User.updateOne({_id:"60b15d602c54f56fcc6370e6"},{
        //     products:response
        // },{new:true});
        await User.findOne({_id:newProduct.userId}).then(async (user)=>{
            let tempArray = user.products;
            tempArray.push(response);
            await User.updateOne({_id:newProduct.userId},{
                products:tempArray
            },{new:true}).then(()=>{console.log("Updated")}).catch(error=>{
                console.log("error here");
                console.log(error);
            });
        })
        return res.status(200).json({message:"Success",response:response});
    }).catch(error =>{
        return res.status(400).json({message:"Failure",error:error.message});
    })
}).catch(error => {
    return res.status(400).json({error: error.message})
});

})

以下是我前端的axios函数

axios.post('https://peaceful-fjord-73813.herokuapp.com/product/add%27,%7B
        name:name,
        price:newPrice,
        gender:gender,
        category:category,
        recfile:selectedFiles,
      // userId:"60bb9b95a1996d0004833ab4",
      })
      .then(res=>{
        console.log(res);
      }).catch(err=>{
        console.log(err.response);
      })}

以下是我从服务器得到的响应。这是我返回的 400 错误以及在我的帖子路由中上传的 try catch 块中的消息,但是错误对象本身是空的,这就是为什么我无法理解错误是什么以及我应该如何解决它。

单击此处查看错误的屏幕截图

非常感谢你帮助我

最好的问候,
里沙夫

标签: node.jserror-handlingmultermulter-s3

解决方案


推荐阅读