阅读提取承诺的正文

我确信这个问题有一个简单的答案,但是对于我来说,我无法弄清楚如何去做。

我有以下快速端点用于上传到Google云端存储。 它工作得很好,从谷歌API的响应给我一个独特的文件名,我想回传到我的前端:

app.post('/upload', (req, res) => { var form = new formidable.IncomingForm(), files = [], fields = []; form .on('field', function(field, value) { fields.push([field, value]); }) .on('file', function(field, file) { files.push([field, file]); }) .on('end', function() { console.log('-> upload done'); }); form.parse(req, function(err, fields, files){ var filePath = files.file.path; bucket.upload(filePath, function(err, file, apiResponse){ if (!err){ res.writeHead(200, {'content-type': 'text/plain'}); res.end("Unique File Name:" + file.name); }else{ res.writeHead(500); res.end(); } }); }); return; }); 

我通过调用一个将文件传递给它的简短函数来到达这个端点:

 function upload(file) { var data = new FormData(); data.append('file', file); return fetch(`upload`,{ method: 'POST', body: data }); } const Client = { upload }; export default Client; 

这个函数是从我的前端调用的,如下所示:

 Client.upload(this.file).then((data) => { console.log(data); }); 

最后的console.log(data)将响应logging到控制台。 但是,我没有看到任何地方我写的响应( "Unique File Name:" + file.name

有没有人有任何build议,我可以从客户端的响应正文中检索这个信息?

编辑:

data看起来像这样当我console.log它:

数据console.log的屏幕截图

编辑2:

这是我使用Postman将文件发送到端点时得到的响应: 使用邮差的响应的屏幕截图

注意你正在处理一个Response对象 。 你需要基本上用Response.json()Response.text() (或通过其他方法) 读取响应stream,以便查看数据。 否则,您的响应主体将始终显示为locking的可读stream。 例如:

 fetch('https://api.ipify.org?format=json') .then(response=>response.json()) .then‌​(data=>{ console.log(data); }) 

如果这给你意想不到的结果,你可能要检查你的邮递员的回应。

@加布罗根给了我答案(如我所料,我有一个错字)

这里是我更新的前端代码,它返回响应正文文本:

 Client.upload(this.file).then(response => response.text()) .then((body) => { console.log(body); }); 

body是一个string,它读取“唯一的文件名:[文件名]”

编辑:

下面是对提取API的一个很好的解释,并阅读从promise对象得到的响应: https : //css-tricks.com/using-fetch/