2011-06-27 7 views
3

Djangoの開発サーバーと同様のコンソールログを使用してNode.jsサーバーを構築しようとしています。例えば。 (Node Beginner Book tutorialに基づく)Node.js - コンソールへのレスポンスstatusCodeのログ(Django開発サーバー)

[27/Jun/2011 15:26:50] "GET /?test=5 HTTP/1.1" 200 545 

次server.js私に時間と要求情報を取得します。

var http = require("http"); 
var url = require ("url"); 
var port = 1234; 

function start(route, handle) { 
    function onRequest(request, response) { 
     var pathname = url.parse(request.url).pathname; 
     var query = url.parse(request.url).query; 
     route(handle, pathname, query, response); 
     logRequest(request); 
    } 
    http.createServer(onRequest).listen(port); 
    console.log("\nServer running at http://192.168.1.5:" + port + "/"); 
    console.log("Press CONTROL-C to quit.\n"); 
} 

function logRequest(request) { 
    var pathname = url.parse(request.url).pathname; 
    var query = url.parse(request.url).query; 
    if (query == undefined) { 
     query = ""; 
    } 
    var currentDate = new Date(); 
    var day = currentDate.getDate(); 
    var month = currentDate.getMonth() + 1; 
    var year = currentDate.getFullYear(); 
    var hours = currentDate.getHours(); 
    var minutes = currentDate.getMinutes(); 
    var seconds = currentDate.getSeconds(); 
    if (minutes < 10) { 
     minutes = "0" + minutes; 
    } 
    if (seconds < 10) { 
     seconds = "0" + seconds; 
    } 
    console.log("[" + year + "/" + month + "/" + day + 
       " " + hours + ":" + minutes + ":" + seconds + '] "' + 
       request.method + " " + pathname + query + 
       " HTTP/" + request.httpVersion + '"'); 
}  

exports.start = start; 

は質問:どのように私はresponse.statusCodeを取得するには、このコードを更新し、何でしょう"545"番号がログ出力にありますか?

logRequest関数にレスポンスオブジェクトを追加しようとすると、router.jsが404エラーを生成していた(デバッグログを介して)ことがわかっていたとしても、ステータスコードは常に "200"でした。

答えて

7

あなたがリンクされ、チュートリアルで見つかったルートメソッドを使用している場合ならば、彼らは

response.writeHead(404, {"Content-Type": "text/html"}); 

このラインを使用して、404のステータスコードを設定したため、その後、response.statusCodeを使用して動作しない理由がありますそこの文書を見てください。Node.JS Docs - writeHead .writeHeadは.statusCode値を設定しません。

response.statusCode = 404; 
response.setHeader("Content-Type", "text/html"); 

が直接からstatusCodeに値を代入し、「暗黙の」ヘッダ宣言(代わりに、書込みヘッドののsetHeader)を使用して:あなたは.statusCode値を使用したい場合は、次のように読み取るためにroute方法で行を変更する必要がありますユーザーの場合と同じ結果が得られますが、ログメソッドで後でstatusCodeにアクセスできるようになります。

関連する問題