cos.getBucket遇到404错误,怎样调用才能把数据传给前端?

  • 回答 (1)
  • 关注 (0)
  • 查看 (32)

router.get('/upload2', async (ctx, next) => {

log.debug("处理开始")

await cos1.getBucket({

Bucket: config.cos.bucket,

Region: config.cos.region,

Prefix: '', // 这里传入列出的文件前缀

MaxKeys: config.cos.maxKeys,

}, (err, data) => {

if (err) {

log.error("查询文件异常",err)

throw er

}

log.debug("处理结束,data", data);

ctx.body = {

'result': data.Contents

}

});

});

[2019-08-07T17:46:16.005] [DEBUG] upload.js - 处理开始

[2019-08-07T17:46:16.013] [INFO] app.js - GET /upload2 - 9ms

--> GET /upload2 404 20ms -

[2019-08-07T17:46:19.441] [DEBUG] upload.js - 处理结束,data { Name: 'vue-study-1255824916',

Prefix: '',

Marker: '',

MaxKeys: '5',

IsTruncated: 'true',

NextMarker: '2cfe9e20-b8e0-11e9-b2af-d3af42fc06f3.jpg',

Contents:

[ { Key: '02b8f2c0-b8d9-11e9-b2d8-273245f3e2e9.jpg',

LastModified: '2019-08-07T06:05:20.000Z',

ETag: '"3230b2e13613a3718e75b6963507cd3b-1"',

Size: '845941',

Owner: [Object],

StorageClass: 'STANDARD' },

{ Key: '058179e0-b8df-11e9-ad94-3f47b33a7f59.jpg',

LastModified: '2019-08-07T06:48:22.000Z',

ETag: '"92a5dc9cde32f928e3bfca027f3c4e47-1"',

Size: '845941',

Owner: [Object],

StorageClass: 'STANDARD' },

{ Key: '18dcd680-b8dd-11e9-bb4f-4395619854eb.jpg',

LastModified: '2019-08-07T06:34:36.000Z',

ETag: '"029af8f241e87473466d31c82608f3d3-1"',

Size: '775702',

Owner: [Object],

StorageClass: 'STANDARD' },

{ Key: '20a51ba0-b8df-11e9-9113-6f3e2cb6d086.jpg',

LastModified: '2019-08-07T06:49:07.000Z',

ETag: '"10739a3d684b27aab5c390f71b821e38-1"',

Size: '595284',

Owner: [Object],

StorageClass: 'STANDARD' },

{ Key: '2cfe9e20-b8e0-11e9-b2af-d3af42fc06f3.jpg',

LastModified: '2019-08-07T06:56:38.000Z',

ETag: '"f043bc41270fc4c49271d98638031d07-1"',

Size: '595284',

Owner: [Object],

       StorageClass: 'STANDARD' } ],
kdmkdm提问于
Grain Light回答于
推荐已采纳

你这是 koa 用错了,日志明确返回了 getBucket 的结果,404 是因为在你设置 context 前,请求就通过了这个 router 中间件。

1、 cos.getBucket 返回的不是 Promise 对象

2、 koa 的 context 不能直接在函数 callback 中使用(koa 基础知识)

有几个方法可以解决

// 方法一,直接包一层 Promise
const data = await new Promise((resolve, reject) => {
	cos1.getBucket({
		Bucket: config.cos.bucket,
		Region: config.cos.region,
		Prefix: '', // 这里传入列出的文件前缀
		MaxKeys: config.cos.maxKeys
	}, (err, data) => {
		if(err) {
			reject(err);
		} else {
			resolve(data);
		}
	});
});

ctx.body = JSON.stringify(data);



// 方法二,用 util.promisify 创建一个返回 Promise 对象的函数,挂载到 cos 实例下
const util = require('util');
cos1.getBucketPromisify = util.promisify(cos1.getBucket);

const data = await cos1.getBucketPromisify({
	Bucket: config.cos.bucket,
	Region: config.cos.region,
	Prefix: '', // 这里传入列出的文件前缀
	MaxKeys: config.cos.maxKeys
});

ctx.body = JSON.stringify(data);

可能回答问题的人

  • 波斯狗儿

    5 粉丝0 提问28 回答
  • galenye

    腾讯 · 工程师 (已认证)

    5 粉丝0 提问29 回答
  • Jinqn

    腾讯 · 高级工程师 (已认证)

    13 粉丝0 提问53 回答
  • 腾讯云技术服务团队

    腾讯云 · 技术服务团队 (已认证)

    18 粉丝0 提问3 回答
  • 宝哥@devops运维

    腾讯 · 高级云计算工程师 (已认证)

    56 粉丝0 提问0 回答
  • elliswu

    腾讯计算机系统有限公司 · 高级工程师 (已认证)

    3 粉丝0 提问0 回答

扫码关注云+社区

领取腾讯云代金券