gpt4 book ai didi

node.js - 在 ondata 事件中更改 node.js 流

转载 作者:太空宇宙 更新时间:2023-11-03 22:38:44 24 4
gpt4 key购买 nike

我正在尝试在将 Node.js http 流发送到解析器之前对其进行编辑。我已经实现了以下代码

//catch any connection event to this server
server.on('secureConnection', function (stream) {
//create a new buffer to hold what we are receiving in this stream
var receiveBuffer = new Buffer(0);
//store a link to the original ondata function so we can call it and restore it
originalOnDataFunction = stream.ondata;
//declare a new ondata function for this stream
stream.ondata = function (d, start, end) {
//record what we have received
receiveBuffer = Buffer.concat([receiveBuffer, d.slice(start, end)]);
//if what we have received is greater than 4 (i.e. we have at least got a GET request)
//then make changes
if (receiveBuffer.length >= 4) {
//reset the streams ondata function to the original
//this is all we want to edit for this connection
stream.ondata = originalOnDataFunction;
//if the first 11 characters of the buffer are 'MKCALENDAR ' then make a change
if (receiveBuffer.toString('ascii', 0, 11) === 'MKCALENDAR ') {
//I change this to MKCOL /MKCALENDAR<rest of buffer> as this will work with the node.js http parser
//and then I can check on the other side for a MKCOL method with /MKCALENDAR as the start of the url and
//know that it was a MKCALENDAR method
var rewrittenBuffer = Buffer.concat([new Buffer('MKCOL /MKCALENDAR', 'ascii'), receiveBuffer.slice(11)]);
//now call the original ondata function with this new buffer
stream.ondata.apply(this, [rewrittenBuffer, 0, rewrittenBuffer.length]);
} else {
//no change needed just call the original ondata function with this buffer
stream.ondata.apply(this, [receiveBuffer, 0, receiveBuffer.length]);
}
}
}
});

这是我从这里的答案中得到的Overriding Node.js HTTP parser

上面的代码似乎在 95% 的情况下都能工作。然而,它不断丢弃请求,然后超时。我看不到它们是如何或在哪里掉落的。谁能帮忙。

谢谢

标记

请注意,secureConnection 来自node.js https.createServer( 调用

最佳答案

你确定要

if (receiveBuffer.length >= 4)

如果第一个缓冲区是至少具有前四个字节的部分 MKCALENDAR,则上面的代码将不会转换为 MKCOL。

关于node.js - 在 ondata 事件中更改 node.js 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15969748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com