Node.js 如何通过调用API的nodejs express应用程序获取png图像
我需要能够返回一个png图像和API端点通过nodejs express应用程序 当尝试返回图像/svg文件时,它会按预期返回和渲染。但当我尝试使用png文件时,会得到一些编码不好的文本,如:Node.js 如何通过调用API的nodejs express应用程序获取png图像,node.js,rest,express,request,mime-types,Node.js,Rest,Express,Request,Mime Types,我需要能够返回一个png图像和API端点通过nodejs express应用程序 当尝试返回图像/svg文件时,它会按预期返回和渲染。但当我尝试使用png文件时,会得到一些编码不好的文本,如: �PNG IHDR\���IDATx�]�U��:Ӂ�.��*��������]�{�A�A�(�� �\���1��� �� A@6���$�(�CXX|d��IUu�dz�渤�g��u�����sO�1��g��W�����~fv��+�TL�z�qןc��e��;��{��狿 以下是我现在掌
�PNG IHDR\���IDATx�]�U��:Ӂ�.��*��������]�{�A�A�(�� �\���1��� �� A@6���$�(�CXX|d��IUu�dz�渤�g��u�����sO�1��g��W�����~fv��+�TL�z�qןc��e��;��{��狿
以下是我现在掌握的代码:
const express = require('express')
const request = require('request-promise')
const port = 3000
const exphbs = require('express-handlebars')
const app = express()
const options = {
method: 'GET',
uri: 'https://www.google.co.uk/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png',
headers: {
'Accept': 'image/png',
'Content-Type': 'image/png'
}
}
app.get('/', (request, response) => {
test(response)
})
app.listen(port, (err) => {
if (err) {
return console.log('something bad happened', err)
}
console.log(`server is listening on ${port}`)
})
function test(resp){
return request(options).then((data)=>{
resp.header('Content-Type', options.headers['Content-Type']).send(data);
}).catch((err) => {
console.log(err)
data.render('error')
})
}
解决我的问题。感谢@lawrencerone
const express = require('express')
const request = require('request-promise')
const port = 3000
const exphbs = require('express-handlebars')
const app = express()
const options = {
method: 'GET',
uri: 'https://www.google.co.uk/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png',
headers: {
'Accept': 'image/png'
}
}
app.get('/', (request, response) => {
response.setHeader('Content-Type', 'image/png')
makeRequest(response)
})
app.listen(port, (err) => {
if (err) {
return console.log('something bad happened', err)
}
console.log(`server is listening on ${port}`)
})
function makeRequest(resp){
request(options.uri, options).pipe(resp)
}
res.header('Content-Type',options.headers['Content-Type'])。发送(数据)代码>浏览器仍在加载上面的字符串,并在响应中设置了内容类型。奇怪的是,仍在查看它,如果您只是通过管道将其请求(“http://...管道(分别)
sidenotedata.render('error')
是错误的,因为数据是不正确的set@LawrenceCherone谢谢,我会用烟斗吹:)。我认为图像被破坏是因为试图读取一个编码错误的字符串(可能?)。我下载了破损的png文件,并与原始文件进行了比较,十六进制数据类似,但有些地方有额外的值。