我正在将nodejs与服务器一起使用。 我需要在网址中执行后端请求以获取jpg,png ...图像并将响应发送到我的角度前端。
我尝试了下一个但它不起作用。 当我使用Postman进行测试时。屏幕上只显示文字。没有形象。
我做错了什么?
//节点
var request=require('request');
app.get('/foto', function(req, res, next) {
request.get('https://firebasestorage.googleapis.com/v0/b/ortototem.appspot.com/o/Photos%2F51%2FFoto?alt=media&token=XXXXX',
function(err,resp,body){
if(err) {
next(err)
}else{
if(resp.statusCode !== 200 ) {
console.log(resp)
} else res.send(resp)
}
})
答案 0 :(得分:3)
由于您的终端没有扩展程序,因此您必须在响应中设置Content-Type
标头,以匹配您获得的图像的mime类型。可能通过编程方式从您的谷歌存储响应或其他东西检测它。您还需要确保传入并使用Buffer类型呈现二进制数据。
例如:
request.get('https://firebasestorage.googleapis.com/v0/b/ortototem.appspot.com/o/Photos%2F51%2FFoto?alt=media&token=YOUR_TOKEN', { encoding: null }, function(err,resp) {
if(err) {
next(err)
} else {
if(resp.statusCode !== 200 ) {
console.log(resp)
} else {
res.contentType(resp.headers['content-type']);
res.end(resp.body, 'binary');
}
}
});
没有这个邮递员或任何浏览器都不会知道它是一个图像或它是什么类型的图像所以它将假定它是纯文本。
这里有三个重要的项目:
encoding: null
上指定request
选项,以便将主体加载为缓冲区res.contentType
设置为等于Firebase响应中的内容类型res.end(resp.body, 'binary')