1

同じディレクトリ(つまり、典型的なHTML5シングルページアプリ)で通常のhtml、js、css、およびjpgファイルを提供するために使用したい標準のnode.js静的ファイルサーバーがあります。ノードサーバーがこれを適切に処理できることを期待します。私が見るものは異なります。

ファイルは提供されindex.htmlますが、その後の要求はドロップされます(つまり、サーバーに到達することはありません)。私のChrome開発ツールでは、次のようなものが表示されます。

GET http://projectcoho.cloudfoundry.com/css/coho.css  http://projectcoho.cloudfoundry.com/:7
GET http://projectcoho.cloudfoundry.com/sencha-touch/sencha-touch-debug.js  http://projectcoho.cloudfoundry.com/:8
GET http://projectcoho.cloudfoundry.com/coho-debug.js  http://projectcoho.cloudfoundry.com/:8

ただし、これらのリソースはサーバー上に存在するため、URLを直接入力するとアクセスできます。そして、これらのリクエストに対して、app.jsのコールバックが呼び出されることはありません(console.logこれらのファイルに対してが呼び出されることはないため、これを知ることができます。

app.jsファイルは次のとおりです。

var path = ".";
var port = process.env.VCAP_APP_PORT || 3000;;

var file = new(static.Server) (path, {
  cache: 600
});

mime.define({
   'text/css': ['css'],
   'text/javascript': ['js'],
   'image/jpeg': ['jpg', 'jpeg']
});

http.createServer(function (request, response) {

    var uri = url.parse(request.url).pathname;
    var filename = libpath.join(path, uri);

    console.log("URI: " + request.url + " , filename: " + filename);

    libpath.exists(filename, function (exists) {
        console.log("Serving " + filename);
        if (!exists) {
            console.log("Not found");
            response.writeHead(404, {
                "Content-Type": "text/plain"
            });
            response.write("404 Not Found\n");
            response.end();
            return;
        }

        if (fs.statSync(filename).isDirectory()) {
            filename += '/index.html';
        }

        var type = mime.lookup(filename);
                file.serveFile(filename, 200, {'content-type' : type}, request, response);
    });
}).listen(port);

ここで何が欠けていますか?

ノードv0.6.15を使用しています

4

1 に答える 1

2

結局、答えは私のcache.manifestファイルが間違っていたということでした。クライアントアプリケーションはキャッシュ内のリソースを探していましたが、存在しませんでした。マニフェストを修正すると、物事が機能し始めました。

于 2012-06-21T18:27:22.890 に答える