dzm*_*dzm 15 javascript gzip node.js
http.get()在Node.js中使用native ,我正在尝试将HTTP响应传递给我可以绑定的事件data和end事件.
我正在使用以下方法处理gzip数据:
http.get(url, function(res) {
if (res.headers['content-encoding'] == 'gzip') {
res.pipe(gunzip);
gunzip.on('data', dataCallback);
gunzip.on('end', endCallback);
}
});
Run Code Online (Sandbox Code Playgroud)
Gunzip是一个流,这只是工作.我试图创建流(写流,然后读取流)并管理响应,但没有太多运气.对于非gzip压缩内容,是否有任何复制此同一笔交易的建议?
hex*_*ide 24
来自HTTP请求的响应对象是可读流的实例.因此,您将使用data事件收集数据,然后在end事件触发时使用它.
var http = require('http');
var body = '';
http.get(url, function(res) {
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
// all data has been downloaded
});
});
Run Code Online (Sandbox Code Playgroud)
在readable.pipe(dest)将基本上做同样的事情,如果body在上面的例子中是一个写流.
目前推荐的管道方式是使用管道功能。它应该可以保护您免受内存泄漏的影响。
const { createReadStream} = require('fs');
const { pipeline } = require('stream')
const { createServer, get } = require('http')
const errorHandler = (err) => err && console.log(err.message);
const server = createServer((_, response) => {
pipeline(createReadStream(__filename), response, errorHandler)
response.writeHead(200);
}).listen(8080);
get('http://localhost:8080', (response) => {
pipeline(response, process.stdout, errorHandler);
response.on('close', () => server.close())
});
Run Code Online (Sandbox Code Playgroud)
另一种具有更多控制权的方法是使用异步迭代器
const { createReadStream} = require('fs');
const { pipeline } = require('stream')
const { createServer, get } = require('http')
const errorHandler = (err) => err && console.log(err.message);
const server = createServer((_, response) => {
pipeline(createReadStream(__filename), response, errorHandler)
response.writeHead(200);
}).listen(8080);
get('http://localhost:8080', (response) => {
pipeline(response, process.stdout, errorHandler);
response.on('close', () => server.close())
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18057 次 |
| 最近记录: |