あなたが初心者であるとき、あなたはあなたの前の視点とはまったく異なるシーンを発見しました - あなたの目には何に使われているのでしょうか?特撮?それとも、クライアントとの単なる相互作用ですか? JavaScriptが最初にブラウザで実行されたと言えます。ただし、このように考えると、ブラウザはJavaScriptでできることを定義するコンテキストを提供するだけです。ここでは、同様の企業と考えることができます。エンタープライズはここでできることを定義しますが、JavaScript言語自体ができることについてはあまり語っていません。実際、完全な言語として、JavaScriptはさまざまなコンテキストで使用でき、さまざまな能力を反映できます。ここで説明したnodejsは、実際にそれを鈍くすることです。これにより、コンテキストと実行中の環境が提供されるため、JavaScriptコードをバックエンドで実行できます(ブラウザ環境から)。
ルーティングのコアはルーティングです。名前が示すように、ルーティングとは、処理/開始のビジネスロジックやモジュールのビジネスロジックの処理/アップロードなど、さまざまなURLを処理するために必要なさまざまな処理方法を指します。ロジックは一貫性がありません。実際には、ルーティングプロセスはルーティングモジュールで「終了」し、ルーティングモジュールはリクエストに対して「アクション」を実行する実際のモジュールではありません。そうしないと、アプリケーションがより複雑になると十分に拡張できません。
ここでは、最初にRequestHandlersというモジュールを作成し、各リクエストハンドラーにプレースホルダー関数を追加します。
コードコピーは次のとおりです。
function start(){
console.log( "request handler 'start'が呼び出されました。");
機能スリープ(ミリ秒){
var starttime = new date()。getTime();
while(new date()。getTime()<StartTime+Milliseconds);
}
睡眠(10000);
「hello start」を返します。
}
function upload(){
console.log( "要求ハンドラー 'アップロード'が呼び出されました。");
「hello upload」を返します。
}
exports.start = start;
exports.upload = upload;
このようにして、リクエストハンドラーとルーティングモジュールを接続して、ルートを「従うべき方法がある」ようにすることができます。その後、一連のリクエストハンドラーをオブジェクトに渡すことを決定しました。このオブジェクトをrouter()関数、メインファイルindex.jsに挿入するには、ゆるく結合されたメソッドを使用する必要があります。
コードコピーは次のとおりです。
var server = require( "./ server");
var router = require( "./ router");
var requesthandlers = require( "./ requesthandlers");
var handle = {};
["/"] = requesthandlers.start;
["/start"] = requesthandlers.start;
["/upload"] = requesthandlers.upload;
server.start(router.route、handle);
上記のように、同じリクエストハンドラーに異なるURLをマップするのは簡単です。キー「/」がオブジェクトにプロパティを追加するだけで、requesthandlers.startに対応します。このようにして、両方のリクエストを開始するように構成 /開始、および /処理することができます。オブジェクトの定義を確認した後、それをサーバーに追加パラメーターとして渡すには、server.jsを参照してください。
コードコピーは次のとおりです。
var http = require( "http");
var url = require( "url");
関数開始(ルート、ハンドル){
function onrequest(request、response){
var pathname = url.parse(request.url).pathname;
console.log( "request for"+pathname+"受信");
ルート(ハンドル、パス名);
Response.writehead(200、{"content-type": "text/plain"});
var content = route(handle、pathname);
Response.write(content);
Response.End();
}
http.createserver(onrequest).listen(8888);
console.log( "サーバーが開始されました。");
}
exports.start = start;
このようにして、ハンドルパラメーターがstart()関数に追加され、ハンドルオブジェクトはルート()コールバック関数の最初のパラメーターとして渡されます。以下はroute.jsを定義します。
コードコピーは次のとおりです。
関数ルート(ハンドル、パス名){
console.log( ""+ pathnameのリクエストをルーティングしようとしています);
if(typeof handle [pathname] === 'function'){
return handle [pathname]();
}それ以外{
console.log( ""+pathnameのリクエストハンドラーは見つかりません);
"404 Not not ingod"を返します。
}
}
exports.route = route;
上記のコードを介して、最初に指定されたパスに対応するリクエストハンドラーが存在するかどうかを確認し、もしそうなら、対応する関数を直接呼び出します。連想配列から要素を取得するのと同じ方法で、渡されたオブジェクトからリクエスト処理機能を取得できます。つまり、[pathname]()を処理できます。そのような表現は、人々に「こんにちは、この道で私を助けてください」と言っていると感じています。プログラムの実行効果は次のとおりです。