-1

以下の OnRequest 関数をログに記録する場合 (この tut http://www.nodebeginner.org/にあります)

var http = require("http");

function onRequest(request, response) {
  console.log("Request received.");
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}

http.createServer(onRequest).listen(8888);

console.log("Server has started.");

ログに「リクエストを受信しました」と出力されます。Webページを1回だけ更新するたびに2回:他の処理を行うときに副作用が発生する可能性があるため、これは面倒です。

node.js が他の http サーバーのようにこれを緩和しないのはなぜですか?

私の質問は、理由を知っている理由ではなく、2回目であることを検出し、重い処理を2回呼び出すのを避ける方法です。

4

2 に答える 2

1

ファビコン リクエストを無視するには、リクエスト オブジェクトの URL プロパティを読み取り、リクエストを処理します。必要に応じて を送信することもでき404 Not Foundます。

http.createServer(function (req, res) { 
  if (req.url === '/favicon.ico') {
    res.writeHead(200, {'Content-Type': 'image/x-icon'});
    res.end();
    return;
  }

  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello, world!');
}).listen(80);

また、他の Web サーバーがファビコン要求を処理する方法に関するあなたの声明は正しくありません。Nginx のように、リクエストは他のリクエストと同じように処理され、通常、HTTP ログに多くの「ファイルが見つかりません」というエラーが発生します。

于 2013-09-02T01:29:34.253 に答える