2017-02-17 15 views
0

Я пытаюсь увеличить количество моих объектов s3, связанных с одной конкретной записью блога в моей базе данных, но я получаю зависание о том, как передать массив моему объекту params, который будет использоваться в методе s3.deleteObjects, но я задерживаю эту ошибку: Check with error message InvalidParameterType: Expected params.Delete.Objects[0].Key to be a string. Я чувствую, что это может быть связано с отсутствием цикла в какой-то момент процесса или, может быть, с форматом значений, передаваемых в мой массив s3File.Nodejs S3 Удалить несколько объектов Error

Вот моя маршрутизация:

.delete(function(req, res){ 

models.File.findAll({ 
    where: { 
     blogId: blog.blogId 
    } 
}).then(function(file){ 

var s3Files = []; 

      function s3Key(link){ 
       var parsedUrl = url.parse(link); 
       var fileName = parsedUrl.path.substring(1); 
       return fileName; 
      } 


      for(var k in file){ 
       console.log('Here are each files ' + file[k].fileName); 
       s3Files.push(s3Key(file[k].fileName)); 
      } 

      console.log('Here are the s3Files ' + s3Files); 

      //GOTTEN TO THIS POINT WITHOUT AN ERROR 
      aws.config.update({accessKeyId: process.env.AWS_ACCESS_KEY, secretAccessKey: process.env.AWS_SECRET_KEY, region: process.env.AWS_REGION}); 



      //var awsKeyPath = s3Key(file.fileName); 

      var s3 = new aws.S3(); 

      var options = { 
       Bucket: process.env.AWS_BUCKET, 
       Delete: { 
       Objects: [{ 
        Key: s3Files 
       }], 
       }, 
      }; 

      s3.deleteObjects(options, function(err, data){ 
       if(data){ 
        console.log("File successfully deleted"); 
       } else { 
        console.log("Check with error message " + err); 
       } 
      }); 
}); 

Вот выход из console.log('Here are each files ' + file[k].fileName);:

Here are each files https://local-bucket.s3.amazonaws.com/1/2017-02-12/screen_shot_2017-02-01_at_8_25_03_pm.png 
Here are each files https://local-bucket.s3.amazonaws.com/1/2017-02-13/test.xlsx 
Here are each files https://local-bucket.s3.amazonaws.com/1/2017-02-13/screen-shot-2017-02-08-at-8.23.37-pm.png 

Вот выход из console.log('Here are the s3Files ' + s3Files);:

Here are the s3Files 1/2017-02-12/screen_shot_2017-02-01_at_8_25_03_pm.png,1/2017-02-13/test.xlsx,1/2017-02-13/screen-shot-2017-02-08-at-8.23.37-pm.png 

Вот сообщение об ошибке:

Check with error message InvalidParameterType: Expected params.Delete.Objects[0].Key to be a string 

ответ

1

Ключ должен быть строкой. Вы должны использовать массив объектов для объектов.
Используйте этот код:

var objects = []; 
for(var k in file){ 
    objects.push({Key : file[k].fileName}); 
} 
var options = { 
    Bucket: process.env.AWS_BUCKET, 
    Delete: { 
    Objects: objects 
    } 
}; 
+0

Это сработало отлично. Спасибо! – cphill