httpプロトコル&リクエストパラメータの取得方法
32863 ワード
ターゲットは、Webサーバ を構築することができる.は、GET、POSTのパラメータを取得することにより、パラメータ を取得することができる.は、ルーティング の作成方法を把握することができる.同期非同期の概念 を知ることができる.コールバック関数の概念 を知ることができる.
サーバ側の基本概念
サイトの構成
Webアプリケーションは、クライアントとサーバの2つに大きく分けられます.
**クライアント:**ブラウザで実行される部分は、ユーザーが見て対話するインタフェースプログラムです.HTML、CSS、JavaScriptを使用して構築します.
**サーバ側:**サーバで実行される部分で、データの保存とアプリケーションロジックの処理を担当します.
[外部チェーン画像の転送に失敗しました(img-W 8 uadwRU-156462670754)(images/fuwuqi-01.png)]
Node Webサイトサーバ
Webアクセスサービスを提供できるマシンは、クライアントのリクエストを受信し、リクエストに応答できるWebサーバです.
[外部チェーン画像の転送に失敗しました(img-58 Dbba 93-156462670757)(images/fuwuqi-02.png)]
IPアドレス
インターネット内のデバイスの一意のID.IPはインターネットProtocol Addressの略で、インターネットプロトコルアドレスを代表する.
[外部リンク画像転送失敗(img-YehHaHZE-1568462670762)(images/ip.png)]
ドメイン名
IPアドレスが覚えにくいため、ドメイン名の概念が生まれて、いわゆるドメイン名はふだんインターネットを利用して使うウェブサイトです
http://www.itheima.com => http://124.165.219.100/アドレスバーにURLを入力しますが、最終的には指定したWebサーバにアクセスするためにドメイン名をipに変換します.
ポート
ポートを使用して異なるサービスを区別します.それは一定の範囲の数字で、範囲は0から65535で、外部にサービスを提供するソフトウェアごとに、1つのポートを占有します.
[外部リンク画像の転送に失敗しました(img-IXrKApDq-156462670763)(images/duankou.png)]
URL(★★★)
統合リソースロケータは、URL(Uniform Resource Locator)とも呼ばれ、インターネット上のリソースの位置を識別するために設けられたアドレス方式で、私たちが普段言っているページアドレスはURLを指しています.
URLの構成
転送プロトコル://サーバIPまたはドメイン名:ポート/リソースの場所ID
http:HTMLページの公開と受信方法を提供するハイパーテキスト転送プロトコル.
開発中のクライアントとサーバ側の説明
開発段階では,クライアントとサーバ側が同じコンピュータ,すなわち開発者コンピュータを使用する.
**ローカルドメイン名:*localhost**ローカルIP:*127.0.0.1
Webサーバの作成(★★★)システムモジュール を参照 webサーバ を作成するクライアントが要求を送信とき(クライアントから送信された要求を傍受) .傍受ポート HTTPプロトコル
HTTPプロトコルの概念
ハイパーテキスト転送プロトコル(英語:HyperText Transfer Protocol、略称:HTTP)は、Webサーバからローカルブラウザにハイパーテキストを転送する方法を規定しており、クライアントサーバアーキテクチャに基づいて動作し、クライアント(ユーザー)とサーバ側(Webサイト)の要求と応答の基準である.
[外部チェーンピクチャの転送に失敗しました(img-FvF 9 Ejnz-156846267765)(images/httpプロトコル.png)]
メッセージ
HTTP要求と応答の過程で伝達されたデータブロックをメッセージと呼び、伝達するデータといくつかの付加情報を含め、所定のフォーマットを遵守しなければならない.
[外部リンク画像の転送失敗(img-K 447 kV 9 o-156462670769)(images/メッセージ.png)]
請求書
要求方式(Request Method) GET要求データ POST送信データ リクエストアドレス(Request URL)
メッセージに応答
HTTPステータスコード 200リクエスト成功 404によって要求されたリソースは、 に見つかりませんでした. 500サーバ側エラー 400クライアント要求構文エラー コンテンツの種類 text/html text/css application/javascript image/jpeg application/json
HTTPリクエストとレスポンス処理
リクエストパラメータ(★★)
クライアントがサーバ側に要求を送信する場合、ログイン操作などの要求パラメータの形式でサーバ側に伝達する必要があるクライアント情報を携帯する必要がある場合があります.
GET要求パラメータパラメータは、ブラウザのアドレスバーに配置されます.たとえば、次のようになります.http://localhost:3000/?name=zhangsan&age=20 パラメータ取得には、urlアドレス を処理するためにシステムモジュールurlを用いる必要がある.
POST要求パラメータパラメータは、送信 のために要求体に配置する. POSTパラメータを取得するには、dataイベントおよびendイベント を使用する必要がある. querystringシステムモジュールを使用してパラメータをオブジェクトフォーマット に変換
ルート(★★)
http://localhost:3000/index http://localhost:3000/loginルーティングとは、クライアント要求アドレスとサーバ側プログラムコードとの対応関係を指す.簡単に言えば、何かに応答してほしいということです.
[外部チェーン画像の転送失敗(img-YE 0 ZWeEB-156462670773)(images/ルーティング.png)]
コアコード
例demoシステムモジュールhttp に導入 Webサーバの作成 Webサーバオブジェクトに要求イベントを追加し、リスニングポート を追加する.ルーティング機能を実現 クライアントの要求方式 を取得する.クライアントの要求アドレス を取得する.
静的リソース
サーバ側は処理を必要とせず,クライアントに直接応答できるリソースがCSS,JavaScript,imageファイルなどの静的リソースである.
ダイナミックリソース
同じリクエストアドレスの異なる応答リソース、このリソースは動的リソースです.
クライアントリクエストパス
GET方式ブラウザアドレスバー linkラベルのhrefプロパティ scriptラベルのsrcプロパティ imgラベルのsrcプロパティ Form提出 POST方式 Form提出 Node.js非同期プログラミング
同期APIと非同期API
**同期API:**現在のAPIの実行が完了した場合のみ、次のAPIの実行を続行できます.
**非同期API:**現在のAPIの実行は後続コードの実行をブロックしない
区別するの戻り値は異なり、同期APIは戻り値からAPI実行の結果を得ることができるが、非同期APIはできない であるコードの実行順序は、 同期APIは上から下へ順次実行され、前のコードは後のコードの実行 をブロックする.非同期APIは、APIの実行が完了するのを待つことなく、コード を下方に実行する.
Node.jsのPromise
Promiseが現れた目的はNodeを解決することだ.js非同期プログラミングにおける地獄へのコールバックの問題
非同期関数(★★)
非同期関数は非同期プログラミング構文の究極の解決策であり、非同期コードを同期の形式に書くことができ、コードにコールバック関数のネストがなくなり、コードを明確にすることができます.
asyncキーワード一般関数定義前にasyncキーワードを付ける一般関数は非同期関数 になる.非同期関数デフォルトはpromiseオブジェクト を返します.非同期関数の内部でreturnキーワードを使用して結果を返すと、結果がラップpromiseオブジェクトのreturnキーワードがresolveメソッド に代わる.非同期関数内部でthrowキーワードを用いるプログラム異常 を投げ出す.非同期関数再チェーン呼び出しthenメソッドを呼び出す非同期関数実行結果 を取得する.非同期関数再チェーン呼び出しcatchメソッドを呼び出す非同期関数実行のエラー情報 を取得する.
awaitキーワード awaitキーワードは非同期関数の にのみ表示されます. await promise awaitの後にpromiseオブジェクトしか書けない他のタイプのAPIを書くことはできません awaitキーワードはpromiseが結果 を返すまで非同期関数を停止して下へ実行する.
非同期関数の応用
サーバ側の基本概念
サイトの構成
Webアプリケーションは、クライアントとサーバの2つに大きく分けられます.
**クライアント:**ブラウザで実行される部分は、ユーザーが見て対話するインタフェースプログラムです.HTML、CSS、JavaScriptを使用して構築します.
**サーバ側:**サーバで実行される部分で、データの保存とアプリケーションロジックの処理を担当します.
[外部チェーン画像の転送に失敗しました(img-W 8 uadwRU-156462670754)(images/fuwuqi-01.png)]
Node Webサイトサーバ
Webアクセスサービスを提供できるマシンは、クライアントのリクエストを受信し、リクエストに応答できるWebサーバです.
[外部チェーン画像の転送に失敗しました(img-58 Dbba 93-156462670757)(images/fuwuqi-02.png)]
IPアドレス
インターネット内のデバイスの一意のID.IPはインターネットProtocol Addressの略で、インターネットプロトコルアドレスを代表する.
[外部リンク画像転送失敗(img-YehHaHZE-1568462670762)(images/ip.png)]
ドメイン名
IPアドレスが覚えにくいため、ドメイン名の概念が生まれて、いわゆるドメイン名はふだんインターネットを利用して使うウェブサイトです
http://www.itheima.com => http://124.165.219.100/アドレスバーにURLを入力しますが、最終的には指定したWebサーバにアクセスするためにドメイン名をipに変換します.
ポート
ポートを使用して異なるサービスを区別します.それは一定の範囲の数字で、範囲は0から65535で、外部にサービスを提供するソフトウェアごとに、1つのポートを占有します.
[外部リンク画像の転送に失敗しました(img-IXrKApDq-156462670763)(images/duankou.png)]
URL(★★★)
統合リソースロケータは、URL(Uniform Resource Locator)とも呼ばれ、インターネット上のリソースの位置を識別するために設けられたアドレス方式で、私たちが普段言っているページアドレスはURLを指しています.
URLの構成
転送プロトコル://サーバIPまたはドメイン名:ポート/リソースの場所ID
http://www.itcast.cn/news/20181018/09152238514.html
http:HTMLページの公開と受信方法を提供するハイパーテキスト転送プロトコル.
開発中のクライアントとサーバ側の説明
開発段階では,クライアントとサーバ側が同じコンピュータ,すなわち開発者コンピュータを使用する.
**ローカルドメイン名:*localhost**ローカルIP:*127.0.0.1
Webサーバの作成(★★★)
const http = require('http');
const app = http.createServer();
app.on('request', (req, res) => {
//
res.end('hi, user'
);
});
// 3000
app.listen(3000);
console.log(' , 3000 , localhost:3000')
HTTPプロトコルの概念
ハイパーテキスト転送プロトコル(英語:HyperText Transfer Protocol、略称:HTTP)は、Webサーバからローカルブラウザにハイパーテキストを転送する方法を規定しており、クライアントサーバアーキテクチャに基づいて動作し、クライアント(ユーザー)とサーバ側(Webサイト)の要求と応答の基準である.
[外部チェーンピクチャの転送に失敗しました(img-FvF 9 Ejnz-156846267765)(images/httpプロトコル.png)]
メッセージ
HTTP要求と応答の過程で伝達されたデータブロックをメッセージと呼び、伝達するデータといくつかの付加情報を含め、所定のフォーマットを遵守しなければならない.
[外部リンク画像の転送失敗(img-K 447 kV 9 o-156462670769)(images/メッセージ.png)]
請求書
要求方式(Request Method)
app.on('request', (req, res) => {
req.headers //
req.url //
req.method //
});
メッセージに応答
HTTPステータスコード
app.on('request', (req, res) => {
//
res.writeHead(200, {
'Content-Type': 'text/html;charset=utf8‘
});
});
HTTPリクエストとレスポンス処理
リクエストパラメータ(★★)
クライアントがサーバ側に要求を送信する場合、ログイン操作などの要求パラメータの形式でサーバ側に伝達する必要があるクライアント情報を携帯する必要がある場合があります.
GET要求パラメータ
const http = require('http');
// url url
const url = require('url');
const app = http.createServer();
app.on('request', (req, res) => {
// url
// true
let {query} = url.parse(req.url, true);
console.log(query);
});
app.listen(3000);
POST要求パラメータ
// querystring HTTP
const querystring = require('querystring');
app.on('request', (req, res) => {
let postData = '';
//
req.on('data', (chunk) => postData += chunk;);
//
req.on('end', () => {
console.log(querystring.parse(postData));
});
});
app.listen(3000);
ルート(★★)
http://localhost:3000/index http://localhost:3000/loginルーティングとは、クライアント要求アドレスとサーバ側プログラムコードとの対応関係を指す.簡単に言えば、何かに応答してほしいということです.
[外部チェーン画像の転送失敗(img-YE 0 ZWeEB-156462670773)(images/ルーティング.png)]
コアコード
//
app.on('request', (req, res) => {
//
let { pathname } = url.parse(req.url);
if (pathname == '/' || pathname == '/index') {
res.end(' ');
} else if (pathname == '/list') {
res.end(' ');
} else {
res.end(' , ');
}
});
例demo
//
const http = require('http');
// url
const url = require('url');
const app = http.createServer();
app.on('request', (req, res) => {
...
}
app.listen(3000);
//
const method = req.method.toLowerCase();
//
const pathname = url.parse(req.url).pathname;
res.writeHead(200, {
'content-type': 'text/html;charset=utf8'
});
if (method == 'get') {
if (pathname == '/' || pathname == '/index') {
res.end(' ')
}else if (pathname == '/list') {
res.end(' ')
}else {
res.end(' ')
}
}else if (method == 'post') {
}
静的リソース
サーバ側は処理を必要とせず,クライアントに直接応答できるリソースがCSS,JavaScript,imageファイルなどの静的リソースである.
ダイナミックリソース
同じリクエストアドレスの異なる応答リソース、このリソースは動的リソースです.
クライアントリクエストパス
GET方式
同期APIと非同期API
**同期API:**現在のAPIの実行が完了した場合のみ、次のAPIの実行を続行できます.
console.log('before');
console.log('after');
**非同期API:**現在のAPIの実行は後続コードの実行をブロックしない
console.log('before');
setTimeout(
() => { console.log('last');
}, 2000);
console.log('after');
区別する
//
function sum (n1, n2) {
return n1 + n2;
}
const result = sum (10, 20);
//
function getMsg () {
setTimeout(function () {
return { msg: 'Hello Node.js' }
}, 2000);
}
const msg = getMsg ();
for (var i = 0; i < 100000; i++) {
console.log(i);
}
console.log('for ');
console.log(' ');
setTimeout(() => { console.log('2 ')}, 2000);
setTimeout(() => { console.log('"0 " ')}, 0);
console.log(' ');
Node.jsのPromise
Promiseが現れた目的はNodeを解決することだ.js非同期プログラミングにおける地獄へのコールバックの問題
let promise = new Promise((resolve, reject) => {
setTimeout(() => {
if (true) {
resolve({name: ' '})
}else {
reject(' ')
}
}, 2000);
});
promise.then(result => console.log(result); // {name: ' '})
.catch(error => console.log(error); // )
非同期関数(★★)
非同期関数は非同期プログラミング構文の究極の解決策であり、非同期コードを同期の形式に書くことができ、コードにコールバック関数のネストがなくなり、コードを明確にすることができます.
asyncキーワード
const fn = async () => {};
async function fn () {}
awaitキーワード
非同期関数の応用