序文Node.js 開発の目的は、JavaScript で Web サーバー プログラムを作成することです。 JavaScript は実際にブラウザ側のスクリプトを支配しているため、その利点は、世界で最も多くのフロントエンド開発者がいることです。すでに JavaScript フロントエンド開発を習得していて、バックエンド開発に JavaScript を適用する方法を学習すれば、真のフルスタック開発者になることができます。 ウェブWeb サーバー プログラムがどのように動作するかを理解するには、まず、HTTP プロトコルの基本を理解する必要があります。 HTTP プロトコルに慣れていない場合は、まず HTTP プロトコルの概要をご覧ください。 HTTP サーバーHTTP サーバー プログラムを開発し、TCP 接続を処理し、HTTP を解析することを最初から行うのは非現実的です。これらのタスクは、実際には Node.js に付属する http モジュールによって完了されています。アプリケーションは HTTP プロトコルを直接処理するのではなく、http モジュールによって提供される要求オブジェクトと応答オブジェクトを操作します。 リクエスト オブジェクトは HTTP リクエストをカプセル化します。リクエスト オブジェクトのプロパティとメソッドを呼び出すことで、HTTP リクエストのすべての情報を取得できます。 レスポンス オブジェクトは HTTP レスポンスをカプセル化します。レスポンス オブジェクトのメソッドを操作することで、ブラウザーに HTTP レスポンスを返すことができます。 Node.js を使用して HTTP サーバー プログラムを実装するのは非常に簡単です。すべてのリクエストに対して Hello world! を返す最も単純な Web プログラム hello.js を実装してみましょう。 '厳密な使用'; var http = require('http'); // http モジュールをインポートします // http サーバーを作成し、コールバック関数を渡します。コールバック関数はリクエストとレスポンスのオブジェクトを受け取ります。var server = http.createServer(function (request, response){ console.log(request.method + ': ' + request.url); // HTTP リクエストのメソッドと URL を取得します。 response.writeHead(200, {'Content-Type': 'text/html'}); // HTTP レスポンス 200 を response に書き込み、Content-Type: text/html を設定します。 response.end('<h1>Hello world!</h1>'); });// HTTPレスポンスのHTMLコンテンツをresponseに書き込む server.listen(8080); // サーバーがポート 8080 を listen できるようにします console.log('サーバーは http://127.0.0.1:8080/ で実行されています'); コマンドプロンプトでプログラムを実行すると、次の出力が表示されます。
コマンド プロンプトを閉じずに、ブラウザーを開いて http://localhost:8080 と入力し、サーバーの応答を確認します。 同時に、コマンド プロンプト ウィンドウでは、プログラムによって印刷された要求情報を確認できます。
これは私たちの最初の HTTP サーバー プログラムです。 ファイルサーバー上記のWebプログラムを引き続き拡張していきましょう。ディレクトリを設定して、Web プログラムをファイル サーバーに変えることができます。これを実現するには、request.url 内のパスを解析し、対応するファイルをローカルで見つけて、ファイルの内容を送信するだけです。 URL を解析するには、Node.js が提供する url モジュールが必要です。使い方は非常に簡単です。parse() を通じて文字列を Url オブジェクトに解析します。 '厳密な使用'; var url = require('url'); console.log(url.parse('http://user:[email protected]:8080/path/to/file?query=string#hash')); 結果は次のとおりです。
ローカル ファイル ディレクトリを処理するには、Node.js が提供するパス モジュールを使用する必要があります。これにより、ディレクトリを簡単に構築できます。 '厳密な使用'; var パス = require('パス'); var workDir = path.resolve('.'); // 現在のディレクトリ ('/Users/michael') を解決します var filePath = path.join(workDir, 'pub', 'index.html'); // 完全なファイル パスを結合します: 現在のディレクトリ + 'pub' + 'index.html' ('/Users/michael/pub/index.html') オペレーティング システムに依存するファイル パスを正しく処理するには、パス モジュールを使用します。 Windows では、返されるパスは C:\Users\michael\static\index.html に似ているため、パスの連結について心配する必要はありません。 最後に、ファイル サーバー file_server.js を実装します。 '厳密な使用'; var fs = require('fs'),url = require('url'),path = require('path'),http = require('http'); var root = path.resolve(process.argv[2] || '.'); // コマンドラインパラメータからルートディレクトリを取得します。デフォルトは現在のディレクトリです。 console.log('Static root dir: ' + root); var server = http.createServer(function (request, response){// サーバーを作成する var pathname = url.parse(request.url).pathname;// '/css/bootstrap.css' のような URL のパスを取得する var filepath = path.join(root, pathname); // '/srv/www/css/bootstrap.css' のような対応するローカル ファイル パスを取得します。 fs.stat(filepath, function (err, stats) {if (!err && stats.isFile()){// ファイル ステータスを取得console.log('200 ' + request.url);// エラーなし、ファイルが存在response.writeHead(200);// 200 応答を送信// ファイル ストリームを応答に直接送信: fs.createReadStream(ファイルパス).pipe(応答); } それ以外 { console.log('404 ' + request.url); // エラーまたはファイルが存在しません response.writeHead(404); response.end('404 Not Found'); } }); }); // 404 応答を送信します server.listen(8080); console.log('サーバーはhttp://127.0.0.1:8080/で実行されています'); ファイルの内容を手動で読み取る必要はありません。レスポンス オブジェクト自体は書き込み可能なストリームであるため、pipe() メソッドを使用してファイルの内容を自動的に読み取り、HTTP レスポンスに出力することができます。 コマンドラインで node file_server.js /path/to/dir を実行し、/path/to/dir をローカル コンピューター上の有効なディレクトリに変更し、ブラウザーに http://localhost:8080/index.html と入力します。 現在のディレクトリに index.html ファイルが存在する限り、サーバーはファイルの内容をブラウザに送信できます。コンソール出力を観察します。
最初のリクエストはブラウザが index.html ページを要求するものであり、後続のリクエストはブラウザが HTML を解析した後に送信した他のリソースのリクエストです。 練習するブラウザに http://localhost:8080/ と入力すると、プログラムは HTTP リクエストがファイルではなくディレクトリに対するものであると認識するため、404 が返されます。 file_server.js を変更してください。要求されたパスがディレクトリの場合、ディレクトリ内で index.html と default.html を順番に自動的に検索します。見つかった場合は、HTML ファイルの内容を返します。 参照ソースコード http サーバー コード (静的 Web サイトを含む) https://github.com/michaelliao/learn-javascript/tree/master/samples/node/http 以上がNode.jsのhttpモジュールの詳しい使い方です。Node.jsについてさらに詳しく知りたい方は、123WORDPRESS.COMの関連記事もぜひご覧ください! 以下もご興味があるかもしれません:
|
<<: Docker に ElasticSearch 6.x をインストールする詳細なチュートリアル
目次1. データベースを理解する1.1 データベースとデータ構造の関係1.2 なぜデータベースが必要...
目次ReactHook とは何ですか? Reactは現在フックを提供している1. 使用状態2.use...
目次序文: 1. 役割の紹介2. 役割に関連する操作要約:序文:前回の記事では、MySQLの権限管理...
「mysqlは内部コマンドではありません」というエラーは、mysqlのbinディレクトリパスが環境変...
MySQL をインストールした後、テーブル データを保存および削除しようとすると、常にエラー メッセ...
今日、非常に奇妙な状況に遭遇しました。docker イメージを更新した後、docker-compos...
最適化によって発生する可能性のある問題最適化は必ずしも単純な環境で実行されるわけではなく、実稼働環境...
目次1. 覚えておくべき知識1. 変数タイプ2. シェル変数の説明3. シングルクォート、ダブルクォ...
導入いつものように、シーンから始めましょう〜インタビュアー:「トランザクションの4つの特性をご存知で...
効率的に要件を満たし、コンポーネント ライブラリの肥大化や車輪の再発明を避けるために、私は以前、大画...
HTML では、Web ページで使用されるエンコーディングを指定する必要があります。一般的な指定方法...
推奨される Docker 学習教材: https://www.runoob.com/docker/d...
ポートマッピングDocker コンテナを起動する前にポート マッピングを行わないと、コンテナ外部のネ...
1 hupからイメージを取得する docker プル nginx 2 マウントするディレクトリを作成...
CentOS6.9はMysql5.7をインストールします。参考までに、詳細は次のとおりです。 1. ...