Node.js http モジュールの使用

Node.js http モジュールの使用

序文

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/ で実行されています');

コマンドプロンプトでプログラムを実行すると、次の出力が表示されます。

$ node hello.js サーバーは http://127.0.0.1:8080/ で実行されています

コマンド プロンプトを閉じずに、ブラウザーを開いて http://localhost:8080 と入力し、サーバーの応答を確認します。

同時に、コマンド プロンプト ウィンドウでは、プログラムによって印刷された要求情報を確認できます。

得る: /

取得: /favicon.ico

これは私たちの最初の 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'));

結果は次のとおりです。

Url { プロトコル: 'http:'、スラッシュ: true、認証: 'user:pass'、ホスト: 'host.com:8080'、ポート: '8080'、ホスト名: 'host.com'、ハッシュ: '#hash'、検索: '?query=string'、クエリ: 'query=string'、パス名: '/path/to/file'、パス: '/path/to/file?query=string'、href: '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 ファイルが存在する限り、サーバーはファイルの内容をブラウザに送信できます。コンソール出力を観察します。

200 /インデックス.html

200 /css/uikit.min.css

200 /js/jquery.min.js

200 /fonts/fontawesome-webfont.woff2

最初のリクエストはブラウザが 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の関連記事もぜひご覧ください!

以下もご興味があるかもしれません:
  • Node.js URL モジュール入門
  • node.js パスモジュールの詳細な理解
  • node.js の http モジュールと url モジュールの簡単な紹介
  • node.js http モジュールの詳細な理解
  • node.js-pathモ​​ジュールについてどれくらい知っていますか
  • Node.js の基礎: パス モジュール、URL モジュール、http モジュールの使用方法の詳細説明

<<:  Docker に ElasticSearch 6.x をインストールする詳細なチュートリアル

>>:  MySQLの構文、特殊記号、正規表現の詳細な説明

推薦する

ウェブページを作るときに知っておくべきいくつかのスキル

1. IE6 では z-index が無効です。 CSS では、階層を変更するために z-index...

リンク更新ページと js 更新ページの使用例

1. リンクの使用方法:コードをコピーコードは次のとおりです。 <a href="j...

JavaScript関数の詳細な説明これを指す問題

目次1.関数内のこの方向1. 通常の機能2. コンストラクター3. オブジェクトメソッド4. イベン...

ウェブサイトの画像にグレー効果を加える3つの方法

私はグレースケールの画像の方が芸術的に見えると思うので、いつもグレースケールの画像を好んで使っていま...

Vue Element-ui はツリーコントロールノードを実装し、アイコンを追加します。詳細な説明

目次1. レンダリング2. データをバインドし、ツリーテーブルにラベルを追加する3. すべてのコード...

Nginx リバース プロキシはポート 80 のリクエストを 8080 に転送します

まず、一連の概念を理解しましょう。nginx リバース プロキシとは何でしょうか?リバース プロキシ...

CSS でフローティングにより親要素の高さが崩れる問題を解決するいくつかの方法

以前は、フロートはレイアウトによく使用されていましたが、フローティングレイアウトを使用すると親要素の...

CSS3 境界効果

CSSとは# CSS (Cascading Style Sheets の略) は、「カスケーディング...

mysqldump でデータベースをバックアップするときに特定のライブラリを除外する例

例: mysqldump –all-databases を使用すると、すべてのライブラリがエクスポー...

設定操作からMySQLへのNULLが見つからない問題を解決する

興味深い発見:合計 1000 件のレコードを含むテーブルがあります。クエリ ステートメントは次のよう...

MySQL列挙型のテスト例

プロジェクトを開発しているとき、支払い済み、支払済み、クローズ済み、返金済みなどの注文ステータスなど...

Web フロントエンドのパフォーマンス最適化の詳細説明: リソースのマージと圧縮

2つの目的のためのリソースの結合と圧縮httpリクエストの数を減らす要求されたリソースのサイズを縮小...

Vue.js と MJML でレスポンシブなメールを作成する

MJML は、開発者が美しく、応答性に優れ、あらゆるデバイスやメール クライアントで動作する魅力的な...

MySQLソースコマンドの使い方の紹介

目次ネット上の質問から生まれた思考MySQL ソースコマンドネット上の質問から生まれた思考今日仕事中...

Dockerイメージを素早くデプロイして実行する最新のIDEAプロセスの詳細な説明

背景docker とアイデアを使用して、Java Web の開発、展開、運用までのプロセス全体を実現...