元の記事を参照してください-http://bjbsair.com/2020-03-22/tech-info/2821/
まず私たちが実装するHTTP静的なWebサーバーのニーズを必要とするかを説明します、我々は、Node.jsのから代理店のニーズを開始しますモジュール。
HTTP
HTTP静的なWebサーバー
ここでは、HTTP静的サーバーは、静的なウェブサイトを作成し、クライアントにサービスを提供するために、Node.jsのを経由して、静的なWebサーバーを作成することです。静的なWebサーバの例は次への唯一のHTML、CSS、JavaScriptの、JPGに関連するサイトや他の静的リソースへの必要性は、Apache Apacheのディレクトリで、ホスト名のみがページを表示することができますアクセスする必要があります。
私たちがいることを見ることができるという静的なウェブサイトのリソースは:含ま
- htmlファイル
- CSSファイル
- JavaScriptファイル
現実には、これらの3つの主要な書類に加えて、サイトのリソースの大半がそうで、画像ファイル、音声ファイル、圧縮ファイル、フォントファイルなどが含まれ、それです。
静的なWebサイトのWebサーバが提供する必要があります
- HTTPサービスは、あなたは、httpために、クライアントによって送信されたリクエストできる静的ページ静的なページと使用するために必要なリソースに戻ります。あなたがたindex.htmlページにアクセスすると仮定し、画像ファイル、CSSスタイルファイル、JavaScriptのファイルに使用されているページは、ディスプレイに、クライアントのブラウザに返される必要があります。リターンのみhtmlファイル場合は、関連する画像、CSSの効果応答を表示しませんブラウザは、JavaScriptの効果が表示されない場合があります。
- クライアントから提出されたモニタhttpリクエストのHTTPポート、ポート80は、上のApacheで使用されます。様々なWebサーバーは、その後、我々は例外ではないのNode.js、プログラムで実現することができる、ポート構成をサポート
- ステータスコード:各クライアントの要求については、戻りページながら、Webサーバはステータスコードを返します。正常要求ステータスコード処理200、及び404はファイルを表し、またはリソースが見つかりませんでした。
HTTPヘッダー中的にContent-Type
HTTPヘッダ
ウェブサイトにアクセスする際の図は、HTTPレスポンスヘッダです。私たちは、このステータスコードステータスコードは、要求が正常に処理されていることを示す、200で見ることができます。応答ヘッダは、Content-Typeで内部返さにおいて、値 ";のcharset = UTF-8テキスト/ HTML" があります。
- text / htmlの:ページフォーマットへ急行の復帰は、ブラウザの形式で表示されるHTML、HTMLページです。
- 文字セットは:ページの文字セットを返します。
それは「text / plainの」、普通紙でのページの表現が表示される場合は時々、ページフォーマットに戻ります。
これらのフォーマットは、集合的に呼ばれているMIME(多目的インターネットメール拡張)インターネット標準のメッセージ内容の種類について説明します。
ファイルの種類に応じて、HTTPヘッダー内のContent-Typeの必要性とは、値が書き込みに対応します。
あなたは、特にコンテンツタイプファイルの拡張子を取得するために、キーの方法により、Node.jsの中で定数を定義することができます。
const mimeType = {
'.ico': 'image/x-icon',
'.html': 'text/html',
'.js': 'text/javascript',
'.json': 'application/json',
'.css': 'text/css',
'.png': 'image/png',
'.jpg': 'image/jpeg',
'.wav': 'audio/wav',
'.mp3': 'audio/mpeg',
'.svg': 'image/svg+xml',
'.pdf': 'application/pdf',
'.zip': 'application/zip',
'.doc': 'application/msword',
'.eot': 'application/vnd.ms-fontobject',
'.ttf': 'application/x-font-ttf',
};
基本的に必要なリソースタイプの静的なウェブサイトの定義を満たす上記のコード。
コードのロジックと実装
- Node.jsの経由でHTTPサーバーを作成し、参照のNode.js 04 HTTPサーバーの予備を
- 解析のURL
- アクセス・パスは、ファイルまたはディレクトリが存在する、そうでない場合は、エラーステータスコード404によって決定されます
- ディレクトリへのアクセス・パスは、ファイルパスがindex.htmlを返送された場合
- リソースタイプに応じConten型を設定してそれに応答して、リクエストパスの内容に応じてファイルを書き込みます。
関連するコードのニーズを処理する文書処理、ディレクトリのすべてのロジックの上にFSのNode.jsのモジュールを呼び出すことによって達成されるように、参照のNode.js 07ファイル操作を。
コードセグメント以下の詳細:
http.createServer(function (req, res) {
// 调用url模块来解析访问的url
const parsedUrl = url.parse(req.url);
// 提取路径
const sPath = path.normalize(parsedUrl.pathname).replace(/^(\.\.[\/\\])+/, '');
let pathname = path.join(__dirname, sPath);
//判断路径是否存在
fs.exists(pathname, function (exist) {
if(!exist) {
//如果路径不存在,则返回404
res.statusCode = 404;
res.end(`File ${pathname} not found!`);
return;
}
// 如果路径是目录,则将路径替换为目录下的 index.html
if (fs.statSync(pathname).isDirectory()) {
pathname += '/index.html';
}
// 根据路径读取文件,此处调用fs模块方法
fs.readFile(pathname, function(err, data){
if(err){
res.statusCode = 500;
res.end(`Error getting the file: ${err}.`);
} else {
// 获取路径后缀名
const ext = path.parse(pathname).ext;
// 根据后缀名获取响应的content-type; 这里的minType定义见上面的代码块
res.setHeader('Content-type', mimeType[ext] || 'text/plain' );
//通过end方法来结束response
res.end(data);
}
});
});
//提供http端口监听
}).listen(8001);
このような静的なWebサーバーのHTTPコードは、多くの言語に比べて、非常に軽い、完了すると、それは非常に無駄のように記述することができます。