Node.js 如何最好地从nodejs网络响应中提取内容正文?
使用以下代码:Node.js 如何最好地从nodejs网络响应中提取内容正文?,node.js,http,Node.js,Http,使用以下代码: var net = require("net"); var client = new net.Socket(); client.connect(8080,"localhost",function() { client.write("GET /edsa-jox/testjson.json HTTP/1.1\r\n"); client.write("Accept-Encoding: gzip\r\n
var net = require("net");
var client = new net.Socket();
client.connect(8080,"localhost",function() {
client.write("GET /edsa-jox/testjson.json HTTP/1.1\r\n");
client.write("Accept-Encoding: gzip\r\n");
client.write("Host: localhost:8080\r\n\r\n");
}
);
client.on("data", function(data) {
console.log(data.toString("utf-8", 0, data.length));
});
我得到以下回应:
HTTP/1.1 200 OK
Date: Thu, 20 May 2021 22:45:26 GMT
Server: Apache/2.4.25 (Win32) PHP/5.6.30
Last-Modified: Thu, 20 May 2021 20:14:17 GMT
ETag: "1f-5c2c89677c5c7"
Accept-Ranges: bytes
Content-Length: 31
Content-Type: application/json
{"message":"message from json"}
这个响应会立即显示在控制台中。但由于它来自于“数据”事件,我想如果反应更大,它会成批出现
因此,我还测试了以下各项(所有其他方面都相同):
我认为我可以使用事件“end”来确保在做其他事情之前我拥有完整的数据集。我想这是可行的,但出乎意料的是,“1”立即显示,但在触发“结束”事件之前需要几秒钟
问题1)与上次执行的“数据”事件相比,“结束”事件为什么会有这样的延迟?有更好的方法吗
问题2)有上面的回答,其中包含一堆标题和一个内容体。提取身体部位的最佳方法是什么
注意,我想用网络库而不是fetch或http库(或任何其他抽象)来实现这一点。我希望它尽可能快。我只能看到两个有效的理由来手动完成这一切:
- 极端速度需要= >然后你应该考虑使用“go”或另一种编译语言
- 学习(总是有趣的) 我建议您使用express或任何其他npm包来处理所有问题,而无需重新发明轮子
const { StringDecoder } = require('string_decoder');
var decoder = new StringDecoder('utf8');
var stdout = '';
stream.on('data', (data) => {
stdout += decoder.write(data);
});
然后回答您的问题:
谢谢你的回答很有帮助。关于Q1)当我添加connection:close header时,立即触发end事件。关于第2个问题)搜索双换行符有效(还按照您的建议添加了解码器)。
const { StringDecoder } = require('string_decoder');
var decoder = new StringDecoder('utf8');
var stdout = '';
stream.on('data', (data) => {
stdout += decoder.write(data);
});