2015-06-07 2 views
6

Использование AWS SDK for Node, почему я не получаю сообщение об ошибке при попытке удалить объект, который не существует (т. Е. Ключ S3 неверен)?Почему S3.deleteObject не работает, если указанный ключ не существует?

Если я указываю несуществующее ведро, с другой стороны, возникает ошибка.

Если рассмотреть следующую программу Node, параметр Key перечисляет ключ, который не существует в ведре, однако error аргумент обратного вызова null:

var aws = require('aws-sdk') 

function getSetting(name) { 
    var value = process.env[name] 
    if (value == null) { 
    throw new Error('You must set the environment variable ' + name) 
    } 
    return value 
} 

var s3Client = new aws.S3({ 
    accessKeyId: getSetting('AWSACCESSKEYID'), 
    secretAccessKey: getSetting('AWSSECRETACCESSKEY'), 
    region: getSetting('AWSREGION'), 
    params: { 
    Bucket: getSetting('S3BUCKET'), 
    }, 
}) 
picturePath = 'nothing/here' 
s3Client.deleteObject({ 
    Key: picturePath, 
}, function (err, data) { 
    console.log('Delete object callback:', err) 
}) 
+2

Потому что это то, о чем говорят спецификации, -> * «Удаляет нулевую версию (если она есть) объекта и вставляет маркер удаления, который становится последней версией объекта. null, Amazon S3 не удаляет какие-либо объекты. "*, если объект не существует, он все равно не является ошибкой при вызове' deleteObject' – adeneo

+0

@adeneo Mind, записывая это как ответ? – aknuds1

ответ

9

Потому что это то, что specs сказать он должен это делать.

DeleteObject (PARAMS = {}, обратный вызов) ⇒ AWS.Request

Удаляет нулевую версию (если есть один) объекта и вставляет удаления маркера, который становится последней версии объекта. Если нет нулевой версии, Amazon S3 не удаляет какие-либо объекты.

Так что если объект не существует, он по-прежнему не является ошибкой при вызове deleteObject, он по-прежнему добавляет маркер удаления.

Смежные вопросы