http server response 客户端报出ERR_INVALID_CHUNKED_ENCODING
发布于 10 年前 作者 LEOxiaoD 13088 次浏览 最后一次编辑是 8 年前 来自 问答

我先这样写

	fs.createReadStream(p).pipe(res);

没有问题,但是

  var readable = fs.createReadStream(p);
	readable.on("data", function(data){
		res.write(data);
	});
	readable.on("end", function(){
		// write response head
		res.writeHead(200, {
			"Content-Type": "text/html",
			"Transfer-Encoding": "chunked"
		});
		res.end();
	});
	readable.on("error", function(){
		res.statusCode = 500;
		res.end("500 Internal Error");
	});

这样的话客户端就报出ERR_INVALID _CHUNKED_ENCODING 怎么回事呢?

8 回复

加了个buffer 问题没有了 谁能解释下是为什么吗 谢啦

  var readable = fs.createReadStream(p);
	var buffer = new Buffer("");
	
	readable.on("data", function(data){
      // res.write(data);
		buffer = Buffer.concat([buffer, data]);
	});
	
	readable.on("end", function(){
		// write response head
		res.writeHead(200, {
			"Content-Type": "text/html",
			"Transfer-Encoding": "chunked"
		});
		res.end(buffer);
	});
	
	readable.on("error", function(){
		res.statusCode = 500;
		res.end("500 Internal Error");
	});

var readstream = fs.createReadStream(filepath,{encoding:‘binary’}); res.write(data,‘binary’); res.end()

@MiguelValentine 这样写好像也会 ERR_INVALID _CHUNKED_ENCODING

ON(data)会被多次触发。这么写

  var datax='';
  var readable = fs.createReadStream(p,'binary');
  readable.on("data", function(data){
      datax +=data;
  });
  
  readable.on("end", function(){
      // write response head
      res.writeHead(200, {"Content-Type": "text/html" });
      res.write(datax,'binary');
	  res.end();
  });
  
  readable.on("error", function(){
      res.statusCode = 500;
      res.end("500 Internal Error");
  });

@MiguelValentine 恩 在第一条回复里我自己解决了这个问题 但是我想知道为什么要加个buffer,然后在end的时候一起传给浏览器

因为那个不能执行的代码是先发送响应的主体再发送的响应头,这个是不正确的,应该要先发送响应头再发送响应主体。

@nodejser 谢谢 受教了

回到顶部