首页 > 解决方案 > Node.js http 响应结束事件从未触发

问题描述

谁能告诉我为什么它永远不会触发结束事件?我怎样才能使它可行?

代码:

const http = require('http');
const fs = require('fs');

const file = fs.createWriteStream("mqdefault.jpg");
const request = http.get("http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg", function(response) {
    response.on('data', function(chunk){
        response.pipe(file);
        process.stdout.write('Received data\n');
    })
    response.on('end', function(){
        response.pipe(file);
        process.stdout.write('All data received');
    })
}).on('error', (e) => {
    console.error(`Got error: ${e.message}`);
});

标签: node.jshttpfs

解决方案


使用file.write(chunk)而不是管道。和file.end完成写入。

   const http = require('http');
   const fs = require('fs');

   const file = fs.createWriteStream("mqdefault.jpg");
   const request = http.get("http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg", function(response) {
       response.on('data', function(chunk){
           file.write(chunk);
           process.stdout.write('Received data\n');
       })
       response.on('end', function(){
           file.end();
           process.stdout.write('All data received');
       })
   }).on('error', (e) => {
       console.error(`Got error: ${e.message}`);
   });

推荐阅读