我有一个原始的HTTP请求字符串,需要从中创建一个对象表示。
为了避免重复发明轮子,我考虑使用内部http解析器来获取一个http.IncomingMessage的实例。
这可行吗?
我认为是可行的,因为字符串与完整流并没有太大的不同。
如何做到这一点?
我查看了源代码,并按以下方式获取了请求解析器
var HTTPParser = process.binding('http_parser').HTTPParser;
var parser = new HTTPParser(HTTPParser.REQUEST)
编辑
来自node.js测试的一些进展。
var request = Buffer(raw);
var parser = new HTTPParser(HTTPParser.REQUEST);
parser.execute(request, 0, request.length);
编辑2
一些事件处理程序丢失了(全部丢失)
parser.onHeadersComplete = function(res) {
console.log('onHeadersComplete');
console.log(res);
};
parser.onBody = function(body) {
console.log('body done');
console.log(body.toString());
}
parser.onMessageComplete = function(res) {
console.log('done');
};
谢谢
http
模块?require('http').createServer(function(req,res){ ... })
每次有请求时都会调用该函数。req
已经是 http.IncomingMessage 的实例。 - stewe