0

最近、node.js を使用して Web アプリを作成しているときに、非常に興味深い問題に遭遇しました。基本的に、私がしているのは、index.htmlページをクライアントに提供することだけです。

コードは次のとおりです。

var http = require('http');
var url = require('url');
var fs = require('fs');
var util = require('util');

var server = http.createServer(function(req, res){
        var path = url.parse(req.url).pathname;
        if(path == '/'){
            console.log("LOADING INDEX...");
            openIndex(req, res);
            console.log("LOADING COMPLETE.")
        } else {
            res.write("Something went wrong...");
            res.end();
        }
    }
);

var openIndex = function(req, res){
    fs.readFile('./index.html', function(error, content){
        if(error){
            res.writeHead(500);
            res.end();
        }
        else{
            res.writeHead(200, {'Content-Type': 'text/html'});
            res.end(content, 'utf-8');
        }
    });
}

index.htmlページのロードの直前と直後に、いくつかのデバッグ ステートメントを配置しました: "LOADING INDEX..."および"LOADING COMPLETE"

今、私は自分のサーバーへのリンクを Facebook の友達と共有して、彼らが私のアプリを見ることができるようにしました。ほとんどの場合、すべてが正常に機能しますが、たまに次のエラーが発生します。

インデックスを読み込んでいます...

このタイプの応答には本文があってはなりません。end() に渡されたデータを無視します。

そして今、私も得ました:

インデックスを読み込んでいます...

このタイプの応答には本文があってはなりません。write() 呼び出しを無視します。

プロセスが「LOADING COMPLETE」ステートメントを実行することはありません。

私はこれを数え切れないほど再現しようとしましたが (さまざまなマシン、ブラウザー、デバイス、OS バージョンでアプリにアクセスして)、毎回正常に動作します。私はこの問題を抱えている他の人を探しましたが、どういうわけか体がGET応答になっているようです? これが何を意味するのか、またはそれを防ぐためにコードを修正する方法が完全にはわかりません。また、このエラーを生成するクライアントに何が表示されるかわかりませんか? 彼らは私のアプリを見ることができますか? (つまり、これらは単なる警告であり、それらに関する限り、すべて問題ありませんか?)

これに関するヘルプは大歓迎です。

ザーン

4

1 に答える 1

0

static を使用しているだけなら、それを自動的に提供するためにindex.html使用してみませんか?express.static

app.use("/index.html", express.static(__dirname + '/index.html'));

これにより、expressjs が自動的にHEADリクエストを処理し、問題が解決するはずです。

于 2012-07-13T14:00:31.370 に答える