最初に Node を学習し始めたとき、これまでの見解とはまったく異なる状況を発見しました。あなたの目には JavaScript は何に使われているのでしょうか?特撮?それともクライアントとのやり取りだけでしょうか? JavaScript は最初にブラウザ内で実行されたとも言えますが、こう考えると、ブラウザは JavaScript を使用して何ができるかを定義するコンテキスト (context) を提供するだけであると考えることができます。ここでできることは定義されていますが、JavaScript 言語自体で何ができるかについてはあまり言及されていません。実際、JavaScript は完全な言語として、さまざまなコンテキストで使用でき、さまざまな機能を反映できます。ここで説明した Nodejs は実際にコンテキスト、つまり実行環境を提供し、JavaScript コードをバックエンド (ブラウザー環境の外) で実行できるようにします。
ルーティング選択の中核は、その名前が示すように、URL ごとに異なる処理方法があることを意味します。たとえば、/start モジュールのビジネス ロジックの処理と、/upload モジュールのビジネス ロジックの処理が一貫していません。 。現実的な実装では、ルーティング プロセスはルーティング モジュール内で「終了」し、ルーティング モジュールはリクエストに対して実際に「アクションを実行」するモジュールではありません。そうしないと、アプリケーションがより複雑になったときに使用できなくなります。 。
ここでは、まず requestHandlers というモジュールを作成し、各リクエスト ハンドラーにプレースホルダー関数を追加します。
関数 start(){
console.log("リクエスト ハンドラー 'start' が呼び出されました。");
関数 sleep(ミリ秒){
var startTime=new Date().getTime();
while(new Date().getTime()
睡眠(10000);
「こんにちはスタート」を返します
}
関数アップロード(){
console.log("リクエストハンドラー「アップロード」が呼び出されました。");
「こんにちはアップロード」を返します
}
エクスポート.start=開始
exports.upload=アップロード;
このようにして、リクエスト ハンドラーとルーティング モジュールを接続して、ルーティングが「たどるパスを持つ」ようにすることができます。その後、一連のリクエスト ハンドラーがオブジェクトを介して渡されることを決定し、このオブジェクトを疎結合メソッドを使用して router() 関数に挿入する必要があると判断しました。メイン ファイルのindex.js:
。
コードをコピー
server.start(router.route,handle);
上に示したように、異なる URL を同じリクエスト ハンドラーにマッピングするのは簡単です。キー「/」を持つプロパティを requestHandlers.start に対応するオブジェクトに追加するだけです。このようにして、/start および / のリクエストが開始ハンドラーによって処理されるように簡単に構成できます。オブジェクトの定義が完了したら、それを追加パラメータとしてサーバーに渡します。server.js を参照してください:
コードをコピー
コードは次のとおりです:
var http=require("http");
var url=require("url");
function start(route,handle){
関数 onRequest(リクエスト, レスポンス){
var pathname=url.parse(request.url).pathname;
console.log("パス名" のリクエストを受信しました。");
ルート(ハンドル,パス名);
response.writeHead(200,{"Content-Type":"text/plain"});
var content=route(ハンドル,パス名);
response.write(content);
response.end();
}
http.createServer(onRequest).listen(8888);
Console.log("サーバーが起動しました。");
}
exports.start=start;
このようにして、ハンドル パラメータが start() 関数に追加され、ハンドル オブジェクトが最初のパラメータとして Route() コールバック関数に渡されます。 Route.js は以下のように定義されます。
コードをコピーします
コードは次のとおりです:
関数ルート(ハンドル,パス名){
console.log("パス名
のリクエストをルーティングしようとしています);
If(ハンドルの種類[パス名]===='関数'){
return handle[パス名]();
}else{
console.log("パス名に対するリクエスト ハンドラーが見つかりませんでした);
「404 が見つかりません」を返す;
}
}
エクスポート.ルート=ルート;
上記のコードでは、まず指定されたパスに対応するリクエスト ハンドラーが存在するかどうかを確認し、存在する場合は対応する関数を直接呼び出します。連想配列から要素を取得するのと同じ方法で、渡されたオブジェクトからリクエスト処理関数を取得できます。つまり、handle[pathname]() という式は、人々に「こんにちは、助けに来てください」と言っているような気分を与えます。このパスを処理します。」 プログラムの実行結果は次のとおりです: