阅读提取承诺的正文
我确信这个问题有一个简单的答案,但是对于我来说,我无法弄清楚如何去做。
我有以下快速端点用于上传到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它:
编辑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/