UNPKG

nos-node-sdk

Version:

NOS Node.js SDK实现了NOS对象操作接口,基于此SDK能方便快速地实现JavaScript应用程序来使用NOS的对象存储服务。

121 lines (100 loc) 4.43 kB
/** * Created by hzlichaolin on 2016/7/13. * you can delete more than one object through this object */ var httpRequest = require('./httpRequest'); var inherits = require('./inherits'); var authrization = require('../services/authorization'); var bucketValidator = require('../services/validateBucketName'); var keyValidator = require('../services/validateKey'); var xml2js = require('xml2js'); var crypto = require('crypto'); var utils = require('../services/utils'); function deleteMultipleObjectsRequest() { httpRequest.call(this); this.options = {host: null, port: -1, path: null, method: 'POST', headers:{}, checkServerIdentity: function (host, cert) { return undefined; } }; this.bucketName = null; this.objectArray = null; this.createRequestBody = function () { var json = { Quiet:'False', Object:this.objectArray }; var b = new xml2js.Builder(); var xml = b.buildObject(json); xml = xml.replace('<root>','<Delete>').replace('</root>','</Delete>'); // console.log(xml) return xml; } } inherits(deleteMultipleObjectsRequest,httpRequest); deleteMultipleObjectsRequest.prototype.setBucketName = function (bucketName) { this.bucketName = bucketName }; deleteMultipleObjectsRequest.prototype.setObjectArray = function (objectArray) { this.objectArray = objectArray }; deleteMultipleObjectsRequest.prototype.sendRequest = function (func) { if (!bucketValidator(this.bucketName)){ throw new Error('invalid bucket name'); } this.options.path = '/?delete'; this.options.host = this.bucketName + '.' + this.options.host; var resource = '/' + this.bucketName + '/?delete'; this.options.headers['Date'] = (new Date()).toUTCString(); this.options.body = new Buffer(this.createRequestBody().toString()); this.options.headers['Content-Length'] = this.options.body.length; this.options.headers['Content-MD5'] = crypto.createHash('md5').update(this.options.body).digest('hex'); var authStr = authrization(this.accessId,this.secretKey,this.options.method,this.options.headers,resource); this.options.headers['Authorization'] = authStr; var responseFunc = function (res) { if (!utils.isOK(res.statusCode)){ //输出异常信息 res.on('data',function (body) { var parser = new xml2js.Parser(); parser.parseString(body,function (err, obj) { var errMessage = { statusCode:res.statusCode, errorCode:obj['Error']['Code'][0], message:obj['Error']['Message'][0], requestId:obj['Error']['RequestId'][0], resource:obj['Error']['Resource'[0]] }; errMessage = JSON.stringify(errMessage); throw new Error(errMessage); }); }); }else { //返回200时的处理逻辑 var result = {}; result['statusCode'] = res.statusCode; result['headers'] = res.headers; res.on('data',function (body) { var parser = new xml2js.Parser(); parser.parseString(body,function (err, obj) { var deletedArr = obj['DeleteResult']['Deleted'] || []; result['deleteSuccess'] = []; for (var i=0;i<deletedArr.length;i++){ result['deleteSuccess'][i] = deletedArr[i]['Key'][0]; } var errArr = obj['DeleteResult']['Error'] || []; result['deleteFail'] = []; for (var i=0;i<errArr.length;i++){ var temp = {}; temp['Key'] = errArr[i]['Key'][0]; temp['Message'] = errArr[i]['Message'][0]; result['deleteFail'][i] = temp; } func(result); }); }); } }; httpRequest.prototype.setProtocol(this.protocol); httpRequest.prototype.sendRequest(this.options,responseFunc); }; module.exports = deleteMultipleObjectsRequest;