Node.js 多错误处理

Node.js 多错误处理,node.js,amazon-web-services,amazon-s3,error-handling,multer,Node.js,Amazon Web Services,Amazon S3,Error Handling,Multer,根据Multer的官方文件,这是处理Multer内部错误的正确方法 var upload = multer().single('avatar') app.post('/profile', function (req, res) { upload(req, res, function (err) { if (err) { // An error occurred when uploading return } // Everything we

根据Multer的官方文件,这是处理Multer内部错误的正确方法

var upload = multer().single('avatar')

app.post('/profile', function (req, res) {
  upload(req, res, function (err) {
    if (err) {
      // An error occurred when uploading
      return
    }

    // Everything went fine
  })
})
我的代码设置有点不同,我不知道如何更改下面的代码来以这种方式处理错误。我最大的问题是我的var上传设置与AmazonS3非常不同。我将如何更改下面的代码以合并如上所示的错误处理

var upload = multer({
    limits : { files: 3 },
    storage: multerS3({
        s3: s3,
        bucket: 'mybucket',
        key: function (req, file, cb) {
            var fileExtension = file.originalname.split(".")[1];
            var path = "uploads/" + req.user._id + Date.now() + "." + fileExtension;
            cb(null, path); 
        },
    destination: function(req, file, callback) {
    callback(null, './public/uploads');
  },
  filename: function(req, file, callback) {
    callback(null, Date.now() + file.originalname);
  }
    })

});
我的邮寄路线是这样设置的。。。(仅显示部分代码)


我不知道您是否仍然有疑问,但是对于仍然关注它的任何人,您应该使用闭包的功能从内部调用您的函数

因此,您的代码应该是:

var upload = multer({
    limits : { files: 3 },
    storage: multerS3({
        s3: s3,
        bucket: 'mybucket',
        key: function (req, file, cb) {
            var fileExtension = file.originalname.split(".")[1];
            var path = "uploads/" + req.user._id + Date.now() + "." + fileExtension;
            cb(null, path); 
        },
    destination: function(req, file, callback) {
    callback(null, './public/uploads');
  },
  filename: function(req, file, callback) {
    callback(null, Date.now() + file.originalname);
  }
    })

}).array('image', 3);

router.post("/", function(req, res, next) {

 upload(req, res, function (err) {
 //deal with the error(s)   
if (err) {
      // An error occurred when uploading
      return
    }

    // Everything went fine
// put here whatever you want to do with your code
 var filepath = undefined;

      var filepath2 = undefined;

      var filepath3 = undefined;

    if(req.files[0]) {
        filepath = req.files[0].key;
    } 

      if(req.files[1]) {
        filepath2 = req.files[1].key;
    } 

     if(req.files[2]) {
        filepath3 = req.files[2].key;
    }

  });

});
这样,您就可以自己处理错误,而不是使用默认的express.js处理程序。希望有帮助!:)

var upload = multer({
    limits : { files: 3 },
    storage: multerS3({
        s3: s3,
        bucket: 'mybucket',
        key: function (req, file, cb) {
            var fileExtension = file.originalname.split(".")[1];
            var path = "uploads/" + req.user._id + Date.now() + "." + fileExtension;
            cb(null, path); 
        },
    destination: function(req, file, callback) {
    callback(null, './public/uploads');
  },
  filename: function(req, file, callback) {
    callback(null, Date.now() + file.originalname);
  }
    })

}).array('image', 3);

router.post("/", function(req, res, next) {

 upload(req, res, function (err) {
 //deal with the error(s)   
if (err) {
      // An error occurred when uploading
      return
    }

    // Everything went fine
// put here whatever you want to do with your code
 var filepath = undefined;

      var filepath2 = undefined;

      var filepath3 = undefined;

    if(req.files[0]) {
        filepath = req.files[0].key;
    } 

      if(req.files[1]) {
        filepath2 = req.files[1].key;
    } 

     if(req.files[2]) {
        filepath3 = req.files[2].key;
    }

  });

});