ルーティング機能をnodejsに実装する

高洛峰
リリース: 2017-02-06 12:51:14
オリジナル
950 人が閲覧しました

Node の初心者として、私はこれまでの見解とはまったく異なる状況を発見しました。あなたの目には JavaScript は何のために使われているのでしょうか?特殊効果?それともクライアントとのやり取りだけでしょうか? JavaScript は最初にブラウザ内で実行されたとも言えますが、こう考えると、ブラウザは JavaScript を使用して何ができるかを定義するコンテキスト (context) を提供するだけであると考えることができます。ここでできることは定義されていますが、JavaScript 言語自体で何ができるかについてはあまり言及されていません。実際、JavaScript は完全な言語として、さまざまなコンテキストで使用でき、さまざまな機能を反映できます。ここで説明した Nodejs は実際にコンテキスト、つまり実行環境を提供し、JavaScript コードをバックエンド (ブラウザー環境の外) で実行できるようにします。

ルーティング選択の中心はルーティングです。その名前が示すように、ルーティングとは、/start モジュールのビジネス ロジックの処理と /upload モジュールのビジネス ロジックの処理など、URL ごとに異なる処理方法があることを意味します。現実的な実装では、ルーティング プロセスはルーティング モジュール内で「終了」し、ルーティング モジュールはリクエストに対して実際に「アクションを実行」するモジュールではありません。そうしないと、アプリケーションがより複雑になったときに使用できなくなります。 。

ここでは、まず requestHandlers というモジュールを作成し、各リクエスト ハンドラーにプレースホルダー関数を追加します。

function start(){   
    console.log("Request handler 'start' was called.");   
       
    function sleep(milliSeconds){   
        var startTime=new Date().getTime();   
        while(new Date().getTime()<startTime+milliSeconds);   
    }   
    sleep(10000);   
    return "Hello Start";   
}   
function upload(){   
    console.log("Request handler &#39;upload&#39; was called.");   
    return "Hello Upload";   
}   
  
exports.start=start;   
exports.upload=upload;
ログイン後にコピー

このようにして、リクエスト ハンドラーとルーティング モジュールを接続して、ルーティングが「たどるパスを持つ」ようにすることができます。 。その後、オブジェクトを通じて一連のリクエスト ハンドラーを渡すことを決定し、疎結合メソッドを使用してこのオブジェクトをメイン ファイルのindex.js:

var server=require("./server");   
var router=require("./router");   
var requestHandlers=require("./requestHandlers");   
  
var handle={};   
handle["/"]=requestHandlers.start;   
handle["/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){   
    function onRequest(request,response){   
        var pathname=url.parse(request.url).pathname;   
        console.log("Request for "+pathname+" received.");   
           
        route(handle,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("Server has started.");   
}    
exports.start=start;
ログイン後にコピー

このようにして、ハンドル パラメーターが start() 関数に追加され、ハンドル オブジェクトが次のように渡されます。最初のパラメータ Route() コールバック関数を考慮すると、route.js は以下のように定義されます:

function route(handle,pathname){   
    console.log("About to route a request for "+ pathname);   
    if(typeof handle[pathname]===&#39;function‘){   
        return handle[pathname]();   
    }else{   
        console.log("No request handler found for "+pathname);   
        return "404 Not Found";   
    }   
}   
exports.route=route;
ログイン後にコピー

上記のコードを通じて、最初に指定されたパスに対応するリクエスト ハンドラーが存在するかどうかを確認し、存在する場合は対応する関数を直接呼び出します。 。連想配列から要素を取得するのと同じ方法で、渡されたオブジェクトからリクエスト処理関数を取得できます。つまり、handle[pathname]() という式は、人々に「こんにちは、助けに来てください」と言っているような気分を与えます。このパスを処理します。 "プログラムの実行結果は次のとおりです:

ルーティング機能をnodejsに実装する

nodejs のルーティング関数に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート