5

私はこれをノードスクリプトに持っています(この質問のために簡略化されています):

var http = require("http"),
    url = require("url"),
    options = url.parse("http://example.com/"),
    moreOptions = url.parse("http://example.net/"),
    callback,
    request,
    moreDifferentRequest;

callback = function( res ) {
    console.log(res.socket._httpMessage._headers.host);
}

request = http.request( options, callback );
request.end();

moreDifferentRequest = http.request( moreDifferentOptions, callback );
moreDifferentRequest.end();

res.socket._httpMessage._headers.hostにホスト名が存在しないため、からホスト名を取得していますres.headers

しかし、下線は私に一時停止を与えます。彼らは私にこう言います。「ねえ、これは内部使用のための私有財産のように扱われるsocketので、それを読まないでください。後のバージョンで完全に変更される可能性があり、私たちはあなたに話すつもりはありません。 。」

ここで間違っていると思うのが正しい場合、コールバック内でホスト名を取得する正しい方法は何ですか?それとも、アンダースコアを完全に誤解しているだけで、私がしていることは問題ありませんか?

4

1 に答える 1

3

はい、それはまさに彼らが言おうとしていることです。もちろん、それが可能であれば、正しい方法は公開され、文書化されたAPIです。しかし、それが不可能な場合は、これを実行し、何かが壊れた場合にそれがあなたにあることを認識しなければなりません。


リクエストを送信しているので、次の場所からホストヘッダーを取得できます。

options.host

HTTP応答にはホストヘッダーがありません。リクエストでホストヘッダーを送信するのはクライアント(あなた)です。


ラッパー関数付き:

var http = require("http"),
    opts = require("url").parse( "http://stackoverflow.com" );


function wrapper( options, callback ) {
    return function() {
        args = [].slice.call(arguments);
        args.push( options );
        return callback.apply( this, args );
    }
}

request = http.request( opts, wrapper(opts, function(response, options){
    console.log( options.host );
}));

request.end();
于 2012-08-24T18:13:11.973 に答える