Skip to content

Commit 06494ed

Browse files
committed
fix(cos): refactor cos module
1 parent a4db56c commit 06494ed

File tree

1 file changed

+42
-25
lines changed

1 file changed

+42
-25
lines changed

src/modules/cos/index.js

Lines changed: 42 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,46 @@ class Cos {
2020
this.cosClient = new cos(this.credentials);
2121
}
2222

23+
promisify(callback) {
24+
return (params) => {
25+
return new Promise((resolve, reject) => {
26+
callback(params, (err, res) => {
27+
if (err) {
28+
const e = new Error(
29+
typeof err.error === 'string' ? err.error : `${err.error.Code}: ${err.error.Message}`,
30+
);
31+
if (err.error && err.error.Code) {
32+
e.code = err.error.Code;
33+
}
34+
reject(e);
35+
}
36+
resolve(res);
37+
});
38+
});
39+
};
40+
}
41+
2342
async createBucket(inputs = {}) {
2443
console.log(`Creating bucket: ${inputs.bucket} in ${this.region} ...`);
2544
const createParams = {
2645
Bucket: inputs.bucket,
2746
Region: this.region,
2847
};
29-
const createHandler = util.promisify(this.cosClient.putBucket.bind(this.cosClient));
48+
const createHandler = this.promisify(this.cosClient.putBucket.bind(this.cosClient));
3049
try {
3150
await createHandler(createParams);
3251
} catch (e) {
33-
if (e.error.Code == 'BucketAlreadyExists' || e.error.Code == 'BucketAlreadyOwnedByYou') {
52+
if (e.code == 'BucketAlreadyExists' || e.code == 'BucketAlreadyOwnedByYou') {
3453
if (!inputs.force) {
3554
throw new TypeError(`API_COS_putBucket`, JSON.stringify(e), e.stack);
3655
} else {
3756
console.log(`Bucket ${inputs.bucket} already exist.`);
3857
}
3958
} else {
40-
// cos在云函数中可能出现ECONNRESET错误,没办法具体定位,初步猜测是客户端问题,是函数启动网络还没准备好,这个还不确定,所以在这里做兼容
59+
// TODO: cos在云函数中可能出现ECONNRESET错误,没办法具体定位,初步猜测是客户端问题,是函数启动网络还没准备好,这个还不确定,所以在这里做兼容
4160
if (JSON.stringify(e).includes('ECONNRESET')) {
4261
// 检查bucket是否存在
43-
const headHandler = util.promisify(this.cosClient.headBucket.bind(this.cosClient));
62+
const headHandler = this.promisify(this.cosClient.headBucket.bind(this.cosClient));
4463
try {
4564
const isHave = await headHandler(createParams);
4665
if (isHave.statusCode == 200) {
@@ -119,7 +138,7 @@ class Cos {
119138
}
120139
setAclParams.AccessControlPolicy = accessControlPolicy;
121140
}
122-
const setAclHandler = util.promisify(this.cosClient.putBucketAcl.bind(this.cosClient));
141+
const setAclHandler = this.promisify(this.cosClient.putBucketAcl.bind(this.cosClient));
123142
try {
124143
await setAclHandler(setAclParams);
125144
} catch (e) {
@@ -143,7 +162,7 @@ class Cos {
143162
Tags: tags,
144163
},
145164
};
146-
const setTagsHandler = util.promisify(this.cosClient.putBucketTagging.bind(this.cosClient));
165+
const setTagsHandler = this.promisify(this.cosClient.putBucketTagging.bind(this.cosClient));
147166
try {
148167
await setTagsHandler(setTagsParams);
149168
} catch (e) {
@@ -153,7 +172,7 @@ class Cos {
153172

154173
async deleteTags(inputs = {}) {
155174
console.log(`Deleting tags for ${this.region}'s bucket: ${inputs.bucket} ...`);
156-
const deleteTagsHandler = util.promisify(
175+
const deleteTagsHandler = this.promisify(
157176
this.cosClient.deleteBucketTagging.bind(this.cosClient),
158177
);
159178
try {
@@ -193,7 +212,7 @@ class Cos {
193212
Region: this.region,
194213
CORSRules: cors,
195214
};
196-
const setCorsHandler = util.promisify(this.cosClient.putBucketCors.bind(this.cosClient));
215+
const setCorsHandler = this.promisify(this.cosClient.putBucketCors.bind(this.cosClient));
197216
try {
198217
await setCorsHandler(setCorsParams);
199218
} catch (e) {
@@ -203,7 +222,7 @@ class Cos {
203222

204223
async deleteCors(inputs = {}) {
205224
console.log(`Deleting cors for ${this.region}'s bucket: ${inputs.bucket} ...`);
206-
const deleteCorsHandler = util.promisify(this.cosClient.deleteBucketCors.bind(this.cosClient));
225+
const deleteCorsHandler = this.promisify(this.cosClient.deleteBucketCors.bind(this.cosClient));
207226
try {
208227
await deleteCorsHandler({
209228
Bucket: inputs.bucket,
@@ -260,7 +279,7 @@ class Cos {
260279
Region: this.region,
261280
Rules: lifecycle,
262281
};
263-
const setLifecycleHandler = util.promisify(
282+
const setLifecycleHandler = this.promisify(
264283
this.cosClient.putBucketLifecycle.bind(this.cosClient),
265284
);
266285
try {
@@ -272,7 +291,7 @@ class Cos {
272291

273292
async deleteLifecycle(inputs = {}) {
274293
console.log(`Deleting lifecycle for ${this.region}'s bucket: ${inputs.bucket} ...`);
275-
const deleteLifecycle = util.promisify(
294+
const deleteLifecycle = this.promisify(
276295
this.cosClient.deleteBucketLifecycle.bind(this.cosClient),
277296
);
278297
try {
@@ -295,7 +314,7 @@ class Cos {
295314
Status: inputs.versioning,
296315
},
297316
};
298-
const setVersioningHandler = util.promisify(
317+
const setVersioningHandler = this.promisify(
299318
this.cosClient.putBucketVersioning.bind(this.cosClient),
300319
);
301320
try {
@@ -328,7 +347,7 @@ class Cos {
328347
await this.setAcl(inputs);
329348
}
330349

331-
const setWebsiteHandler = util.promisify(this.cosClient.putBucketWebsite.bind(this.cosClient));
350+
const setWebsiteHandler = this.promisify(this.cosClient.putBucketWebsite.bind(this.cosClient));
332351
try {
333352
await setWebsiteHandler(staticHostParams);
334353
} catch (e) {
@@ -337,7 +356,7 @@ class Cos {
337356
}
338357

339358
async getBucket(inputs = {}) {
340-
const getBucketHandler = util.promisify(this.cosClient.getBucket.bind(this.cosClient));
359+
const getBucketHandler = this.promisify(this.cosClient.getBucket.bind(this.cosClient));
341360
try {
342361
const res = await getBucketHandler({
343362
Bucket: inputs.bucket,
@@ -350,7 +369,7 @@ class Cos {
350369
}
351370

352371
async getObjectUrl(inputs = {}) {
353-
const getObjectUrlHandler = util.promisify(this.cosClient.getObjectUrl.bind(this.cosClient));
372+
const getObjectUrlHandler = this.promisify(this.cosClient.getObjectUrl.bind(this.cosClient));
354373
try {
355374
const { Url } = await getObjectUrlHandler({
356375
Bucket: inputs.bucket,
@@ -370,16 +389,14 @@ class Cos {
370389
}
371390

372391
async upload(inputs = {}) {
373-
console.log(`Uploding files to ${this.region}'s bucket: ${inputs.bucket} ...`);
374-
375392
const { bucket } = inputs;
376393
const { region } = this;
377394

378395
if (!bucket) {
379-
throw new TypeError(`PARAMETER_COS`, 'Could not find bucket name.');
396+
throw new TypeError(`PARAMETER_COS`, 'Bucket name is required');
380397
}
381398

382-
// 上传分为文件夹上传呢和文件上传
399+
console.log(`Uploding files to ${this.region}'s bucket: ${inputs.bucket} ...`);
383400
if (inputs.dir && (await fs.existsSync(inputs.dir))) {
384401
const options = { keyPrefix: inputs.keyPrefix };
385402

@@ -415,7 +432,7 @@ class Cos {
415432
Key: key,
416433
Body: fs.createReadStream(item.path),
417434
};
418-
handler = util.promisify(this.cosClient.putObject.bind(this.cosClient));
435+
handler = this.promisify(this.cosClient.putObject.bind(this.cosClient));
419436
uploadItems.push(handler(itemParams));
420437
});
421438
try {
@@ -430,7 +447,7 @@ class Cos {
430447
Key: inputs.key || path.basename(inputs.file),
431448
Body: fs.createReadStream(inputs.file),
432449
};
433-
const handler = util.promisify(this.cosClient.putObject.bind(this.cosClient));
450+
const handler = this.promisify(this.cosClient.putObject.bind(this.cosClient));
434451
try {
435452
await handler(itemParams);
436453
} catch (e) {
@@ -554,7 +571,7 @@ class Cos {
554571
try {
555572
detail = await this.getBucket(inputs);
556573
} catch (e) {
557-
if (e.error && e.error.Code && e.error.Code === 'NoSuchBucket') {
574+
if (e.message.indexOf('NoSuchBucket') !== -1) {
558575
console.log(`Bucket ${inputs.bucket} not exist`);
559576
return;
560577
}
@@ -569,7 +586,7 @@ class Cos {
569586
});
570587

571588
try {
572-
const deleteMultipleObjectHandler = util.promisify(
589+
const deleteMultipleObjectHandler = this.promisify(
573590
this.cosClient.deleteMultipleObject.bind(this.cosClient),
574591
);
575592
await deleteMultipleObjectHandler({
@@ -581,15 +598,15 @@ class Cos {
581598
console.log(e);
582599
}
583600
try {
584-
const deleteBucketHandler = util.promisify(
601+
const deleteBucketHandler = this.promisify(
585602
this.cosClient.deleteBucket.bind(this.cosClient),
586603
);
587604
await deleteBucketHandler({
588605
Region: this.region,
589606
Bucket: inputs.bucket,
590607
});
591608
} catch (e) {
592-
if (e.error && e.error.Code && e.error.Code === 'NoSuchBucket') {
609+
if (e.message.indexOf('NoSuchBucket') !== -1) {
593610
console.log(`Bucket ${inputs.bucket} not exist`);
594611
} else {
595612
throw new TypeError(`API_APIGW_deleteBucket`, e.message, e.stack);

0 commit comments

Comments
 (0)