ホームページ >ウェブフロントエンド >jsチュートリアル >nodejs_node.jsにルーティング機能を実装する

nodejs_node.jsにルーティング機能を実装する

WBOY
WBOYオリジナル
2016-05-16 16:23:591097ブラウズ

最初に 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:

コードをコピー

コードは次のとおりです: varserver=require("./server"); var router=require("./router"); var requestHandlers=require("./requestHandlers"); 変数ハンドル={}; ハンドル["/"]=requestHandlers.start; ハンドル["/start"]=requestHandlers.start; handle["/upload"]=requestHandlers.upload
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]() という式は、人々に「こんにちは、助けに来てください」と言っているような気分を与えます。このパスを処理します。」 プログラムの実行結果は次のとおりです:




声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。