为什么S3.deleteObject在指定的键不存在时不会失败?

akn*_*ds1 15 javascript rest node.js aws-sdk

使用AWS SDK for Node,为什么在尝试删除不存在的对象时(即S3键错误),我不会收到错误?

另一方面,如果我指定不存在的存储桶,则会产生错误.

如果考虑以下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)
})
Run Code Online (Sandbox Code Playgroud)

ade*_*neo 16

因为这是规范所说应该做的.

deleteObject(params = {},callback)⇒AWS.Request

删除对象的null版本(如果有)并插入删除标记,该标记将成为对象的最新版本.如果没有null版本,则Amazon S3不会删除任何对象.

因此,如果对象不存在,则在调用时仍然不是错误deleteObject,它仍会添加删除标记.

  • 那么我怎么知道它是失败还是成功呢? (4认同)
  • 附带说明一下,这种行为称为幂等:您可以将其视为“此请求应确保此对象不再存在”,而不是“此请求应删除此对象”。如果该对象尚不存在,则仍然遵守该合同。 (2认同)