0

だから私はnode.jsを学んでおり、新しいHTMLページにルーティングして基本的なテキストを表示することに成功しています。ただし、他のJavaScript、CSS、または画像を追加しようとすると、HTMLファイル全体をロードするように扱われるようです。

コードは長すぎて実際に投稿できないため、console.log の出力を共有します。

  • /start のリクエストを受け取りました。
  • /start のリクエストをルーティングしようとしています
  • リクエストハンドラ「start」が呼び出されました。
  • /socket.io/lib/socket.io.js のリクエストを受け取りました。
  • /socket.io/lib/socket.io.js のリクエストをルーティングしようとしています
  • /socket.io/lib/socket.io.js のリクエスト ハンドラが見つかりません
  • /style.css のリクエストを受け取りました。
  • /style.css のリクエストをルーティングしようとしています
  • /style.css のリクエスト ハンドラが見つかりません
  • /test.jpg のリクエストを受け取りました。
  • /test.jpg のリクエストをルーティングしようとしています
  • /test.jpg のリクエスト ハンドラが見つかりません
  • /favicon.ico のリクエストを受け取りました。
  • /favicon.ico のリクエストをルーティングしようとしています
  • /favicon.ico のリクエスト ハンドラが見つかりません

全体のfavicon.ico混乱は理解していますが、他のファイルをそのように扱う理由がわかりません。

Node.js でページをロードするときに何をする必要がありますか?

4

2 に答える 2

2

node.js は、デフォルトで webroot ディレクトリ内のファイルを提供する Web サーバーではないことを覚えておく必要があります。これは、ネットワークおよび http 要求を処理するための API を持つ低レベルのアプリケーションです。Express.js は、リソースを配置できるパブリック フォルダーを公開しますが、ファイルをフェッチし、言及したのとほぼ同じアプローチを使用して要求に応答します。

Node.js は、HTTP でサーブ ファイルを処理するように正確に最適化されているわけではありません。ほとんどの人が本番環境で行うことは、リバース プロキシ (nginx が一般的な選択肢です) をインストールして、リクエストをルーティングすることです。Web ルートで見つかった場合は単にファイルを提供するように nginx に指示できます。それ以外の場合は、要求を node.js にリダイレクトします。

于 2013-08-01T16:06:19.220 に答える
0

Well, for those who are rather uninitiated as I am, here is one way to display most common file types without using Express.

    var file_path = "";
    var mimes = {
        'css':  'text/css',
        'js':   'text/javascript',
        'htm':  'text/html',
        'html': 'text/html',
        'png': 'image/png',
        'jpg': 'image/jpg',
        'jpeg': 'image/jpeg'
    };

    // parses the url request for a file and pulls the pathname
    var url_request = url.parse(request.url).pathname;      
    // finds the placement of '.' to determine the extension                
    var tmp  = url_request.lastIndexOf(".");
    // determines the extension by uing .substring that takes everything after '.'
    var extension  = url_request.substring((tmp + 1));

    //set path of static pages
    if (extension === 'css' || extension === 'js' || extension === 'htm' || extension === 'html' || extension === 'png' || extension === 'jpg' || extension === 'jpeg'){
        file_path = url_request.replace("/", "");
    }

    //load needed pages and static files
    fs.readFile(file_path, function (error, data){
        if(error){
            response.writeHeader(500, {"Content-Type": "text/html"});  
            response.write("<h1>FS READ FILE ERROR: Internal Server Error!</h1>");    
        }
        else{
            response.writeHeader(200, {"Content-Type": mimes[extension]});  
            response.write(data);
        }

        response.end();  
    });

I would love to know of a more succinct way of doing this without using Express.

于 2013-08-01T15:59:22.970 に答える