我使用node.js 0.10.33并请求2.51.0。
在下面的示例中,我构建了一个使用请求代理图像的简单Web服务器。设置了两条路线来代理同一图像..
/ pipe 只是将原始请求传递给响应
/ callback 等待请求回调,并将响应标头和正文发送给响应。
管道示例按预期工作,但回调路径不会呈现图像。标题和正文看起来是一样的。
回调路线会导致图像中断?
以下是示例代码:
var http = require('http');
var request = require('request');
var imgUrl = 'https://developer.salesforce.com/forums/profilephoto/729F00000005O41/T';
var server = http.createServer(function(req, res) {
if(req.url === '/pipe') {
// normal pipe works
request.get(imgUrl).pipe(res);
} else if(req.url === '/callback') {
// callback example doesn't
request.get(imgUrl, function(err, resp, body) {
if(err) {
throw(err);
} else {
res.writeHead(200, resp.headers);
res.end(body);
}
});
} else {
res.writeHead(200, {
'Content-Type': 'text/html'
});
res.write('<html><head></head><body>');
// test the piped image
res.write('<div><h2>Piped</h2><img src="/pipe" /></div>');
// test the image from the callback
res.write('<div><h2>Callback</h2><img src="/callback" /></div>');
res.write('</body></html>');
res.end();
}
});
server.listen(3000);
结果
答案 0 :(得分:3)
问题是默认情况下body
是一个(UTF-8)字符串。如果您期望二进制数据,则应在encoding: null
选项中明确设置request()
。这样做会使body
成为缓冲区,二进制数据保持不变:
request.get(imgUrl, { encoding: null }, function(err, resp, body) {
if(err) {
throw(err);
} else {
res.writeHead(200, resp.headers);
res.end(body);
}
});