3

Node.js v0.8.15 で HTTPParser を使用しています。残念ながら、一部のコールバックは呼び出されません。

たとえば、次のコードは のみを呼び出しますonHeadersCompleteonURLonHeaderFieldを呼び出すことができませんでしたonHeaderValue

var
    HTTPParser = process.binding('http_parser').HTTPParser,
    parser = new HTTPParser(HTTPParser.REQUEST),
    request = new Buffer(
        'GET /test HTTP/1.1\r\n' +
        'Host: www.example.com\r\n' +
        'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/17.0 Firefox/17.0\r\n' +
        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n' +
        'Accept-Language: en-US,en;q=0.5\r\n' +
        'Accept-Encoding: gzip, deflate\r\n' +
        '\r\n'
    );

parser.onURL = function() {
    console.log('onURL');
}

parser.onHeaderField = function() {
    console.log('onHeaderField');
}

parser.onHeaderValue = function() {
    console.log('onHeaderValue');
}

parser.onHeadersComplete = function() {
    console.log('onHeadersComplete');
}

parser.execute(request, 0, request.length);

どうしたの?

4

3 に答える 3

2

process.bindingコアノードライブラリでのみ使用されることになっています。ソースを簡単に読んだところ、httpパーサーC ++コードは、イベントの小さなサブセット(、、、、)のみを公開しているonHeadersためonHeadersComplete、ラッチできるイベントはこれらだけだと思います。 onBodyonMessageComplete

パーサーは、パーサーからの追加のコールバックを内部的に使用しますが、イベントとしてJSランドに公開されません。

于 2012-12-01T19:04:47.647 に答える