我正在使用带有一些附加模块的 nodeJS 来从一组网站中进行网页抓取和媒体项目识别。
节点服务器基本上会返回页面上标识的所有项目及其相关元数据的 JSON 标记。JSON 数据生成正确,因为我可以在服务器日志中看到它,但是当我将其写入客户端时,由于某种原因 JSON 响应被终止。
我使用所有浏览器并使用其他客户端对此进行了测试,这似乎表明 response.write(response, 'utf-8') 可能没有发送整个数据或连接由于某种原因而关闭。
我验证了我的测试用例不涉及分块,因此如果客户端仍在等待下一个数据块,则不会出现连接被客户端主动关闭的问题。即 response.write 在这种情况下返回 true,这意味着所有数据都已写入客户端。
关于什么可能导致连接终止或响应被截断的任何指针?对于较小尺寸的 JSON 响应,客户端会正确接收响应。
Code:
return parseDOM(page, url, function(err, response){
if(err){
res.writeHeader(200, {'Content-Type':'application/json'});
res.end('Error Parsing DOM from ' + url);
e.message = 'Error Parsing DOM';
callback(e, req, res, targetUrl);
return;
}
else {
if(response){
res.writeHeader(200, {'Content-Type':'application/json', 'Content-Length':response.length});
console.log(response);
res.write(response, 'UTF-8');
res.end();
callback(null, req, res, targetUrl);
return;
}
}
});