ホームページ >ウェブフロントエンド >jsチュートリアル >初心者向けのnode.js
node.jsのイベント駆動型プログラミングは、初心者にとって難しい場合がありますが、これは開始するのが難しいという意味ではありません。この記事では、node.jsの基本を紹介し、なぜそれが人気があるのかを説明します。
node.jsを開始するには、まずnode.jsとPHP、Python、Rubyなどの従来のサーバー側スクリプト環境の違いを理解する必要があります。
あなたは非同期プログラミングに精通している可能性があります。ノードの各関数は非同期です。したがって、通常、スレッドをブロックするすべての操作は、約束を使用してバックグラウンドで実行されます。これはノードの最も重要なことです。たとえば、ファイルシステムでファイルを読んでいる場合、非同期関数が使用されます。
ノード関数のバージョンを使用している場合は、約束が表示される前に設計されたコールバック関数を使用します。ほとんどのノード関数にはPromiseが同等のものがあるため、ここで使用されるコールバック関数を約束ベースの等価物に変換し、構文を比較することをお勧めします。
ノードを使用すると、自分で多くの仕事をしなければなりません。たとえば、HTTPモジュールは非常に合理化されており、特定のスタイルに固執していません。これは初心者にとって圧倒的かもしれませんが、利点は高性能Webアプリケーションを構築する能力です(ただし、JavaScriptのパフォーマンスは主にV8が最適化されたエンジンに起因しています)。 1つのスクリプトは、すべてのクライアントとのすべての通信を処理します。これにより、アプリケーションが使用するリソースの量が大幅に削減されます。たとえば、簡単なnode.jsアプリケーションコードを次に示します。
const i、a、b、c、max; max = 1000000000; var d = date.now(); for(i = 0; i <max i a="1234" b="1234" c="1234" console.log d><p>これがPHPで書かれた同等のコードです:</p> <pre class="brush:php;toolbar:false"> $ a = null; $ b = null; $ c = null; $ i = null; $ max = 100000000; $ start = microTime(true); for($ i = 0; $ i <p>それでは、ベンチマークデータを見てみましょう。次の表には、これら2つの簡単なアプリケーションのミリ秒単位での応答時間を示します。</p><pre class="brush:php;toolbar:false"> const http = require( 'http');
HTTP変数。
上記のコードでは、モジュールの名前をエクスポートオブジェクトに渡し、コードのスニペットを公開するプロパティとメソッドを入力します。次のモジュールの例を考えてみましょう。
exports.area = function(r){ Math.pi * r ** 2を返します。 }; exports.circumference = function(r){ 2 * math.pi * rを返します。 };
このコードは、エクスポートオブジェクトを作成します。これらの関数は、PIで定義され、外部干渉から完全に保護されているため、モジュールの外部でアクセスできます。したがって、Circuiteference()が常に期待どおりに機能することを保証できます(インポートキーワードの値を提供するだけです):
// ファイル "./mymodule.js"からmymoduleをインポートします //ノードビルトイン/パッケージ「HTTP」からHTTPをインポートする
ブラウザでは、ESMは上記のように、相対ファイルパスでのみ検索できます。ただし、ノードでは、ノード:プレフィックスなしでパスを通過できます。
ただし、以前のメソッドはデフォルトエクスポートに対してのみ機能します。名前付きエクスポートを使用している場合(後で詳細)、わずかに異なる構文を使用する必要があります。
"./mymodule.js"から{exportone、exporttwo}をimport
コンテンツをエクスポートするには、エクスポートデフォルトのキーワードを使用します。エクスポートは名前付きエクスポートに使用され、エクスポートデフォルトはデフォルトエクスポートに使用されます。名前のエクスポートを使用すると、さまざまなコンテンツをエクスポートし、上記のインポート構文を使用して異なるモジュールでそのうちの1つのみを使用できます。 1つのコンテンツのみをエクスポートする場合、デフォルトでエクスポートしやすくなります。
//名前export関数exportone(){ ... } export関数exporttwo(){ ... } //デフォルトエクスポートデフォルト関数defaultfunction(){ ... }
このチュートリアルの残りの部分では、ESMを使用します。
ノードは、GoogleのV8 JavaScriptエンジンで実行されるJavaScript環境です。したがって、クライアント開発で使用するベストプラクティスに従う必要があります。たとえば、何かをグローバルな範囲に入れないでください。ただし、これは必ずしも可能ではありません。ノードのグローバルスコープは(ブラウザのウィンドウ)であり、変数を宣言するときにVARを省略することにより、関数のグローバル変数を簡単に作成できます。
当然のことながら、アプリケーションを作成して実行する前に、ノードをインストールする必要があります。 WindowsまたはMacOSを使用している場合、インストールは非常に簡単です。 Linuxには、任意のパッケージマネージャーを使用してください。たとえば、APTをサポートする配布を使用している場合は、端末を開き、タイプを開きます。
sudo apt-getアップデート sudo apt-getインストールノード
または:
Sudo Aptitudeの更新 sudo aptitudeインストールノード
node.jsは、SIDリポジトリにあります。
sudo echo deb https://ftp.us.debian.org/debian/ sid main>/etc/apt/sources.list.d/sid.list
ただし、古いシステムにSIDパッケージをインストールすると、システムが損傷する可能性があることに注意してください。注意して、module_nameを削除してください。
もちろん、最初のnode.jsスクリプトは、コンソールに表示されるテキスト「Hello World!」を印刷します。
先に進み、より高度なアプリケーションを持っています。次のコードから始めましょう。コメントを読んでから、以下の説明を読んでください。
// HTTPモジュールが含まれています。 「http」から{createserver}をインポート //サーバーを作成します。パラメーターとして渡される関数は、要求が作成されるたびに呼び出されます。 //要求変数はすべての要求パラメーターを保存します//応答変数を使用すると、クライアントに送信された応答に対してアクションを実行できます。 createserver(function(request、response){ //リスナーをエンドイベントに添付します。 //このイベントは、クライアントがすべてのデータを送信して応答を待つときに呼び出されます。 request.on( "end"、function(){ //ヘッダーを応答に書き込みます。 // 200はHTTPステータスコードです(このコードは成功を示しています) // 2番目のパラメーターはオブジェクトのヘッダーフィールドを保存します Response.writehead(200、{ 「コンテンツタイプ」:「テキスト/プレーン」 }); //データを送信して応答を終了します。 Response.End( 'Hello http!'); }); //ポート8080を聞いてください。 })。聞きます(8080);
このコードは非常に簡単です。 respons.end()を使用して、より多くのデータをクライアントに送信できます。このコードをhttp.jsとして保存し、コンソールに次のコマンドを入力します。
ノードhttp.js
ブラウザを開き、 https://www.php.cn/link/7232a90ea7d391905f9ee07bcc7c5967に移動します。ページにText Hello httpが表示されます。
前述のように、リクエストパラメーターを解析するなど、ノードですべての作業を行う必要があります。ただし、これは非常に簡単です。次のコードを見てください。
// createServerを含めます 「http」から{createserver}をインポート //リクエストパラメーターの解析に非常に役立つURLモジュール。 url = require( "url"); //サーバーを作成します。 createserver(function(request、response){ //リスナーをエンドイベントに添付します。 request.on( 'end'、function(){ //パラメーターを要求し、_get変数に保存します。 //この関数は、リクエストからURLを解析し、オブジェクト表現を返します。 var _get = url.parse(request.url、true).query; //ヘッダーを応答に書き込みます。 Response.writehead(200、{ 「コンテンツタイプ」:「テキスト/プレーン」 }); //データを送信して応答を終了します。 Response.End( 'ここにあなたのデータがあります:' _get ['data']); }); //ポート8080を聞いてください。 })。聞きます(8080);
このコードは、URLのパラメーターを取得するクエリ属性を使用します。このファイルをget.jsとして保存し、次のコマンドで実行します。
node get.js
次に、データパラメーターに移動しても、スクリプトを中断しません。
ノード内のファイルを管理するには、 FSモジュール(コアモジュール)を使用します。 Fs.WriteFile()メソッドを使用して、それぞれファイルを読み書きします。次のコードの後にパラメーターについて説明します。
// createServerを含める 「http」から{createserver}をインポート // "fs"からfs関数インポート{readfile、writefile} // HTTPサーバーを作成します。 createserver(function(request、response){ //リスナーをエンドイベントに添付します。 request.on( "end"、function(){ //ファイルを読み取ります。 readfile( "test.txt"、 'utf-8'、function(error、data){ //ヘッダーに書き込みます。 Response.writehead(200、{ 「コンテンツタイプ」:「テキスト/プレーン」 }); //ファイルから取得した番号をインクリメントします。 data = parseint(data)1; //ファイルにインクリメント番号を書き込みます。 writefile( 'test.txt'、data); //いくつかの素敵なメッセージで応答を終了します。 Response.End( 'このページは「データ」の' time! 'を更新しました); }); }); //ポート8080を聞いてください。 })。聞きます(8080);
これをfiles.jsとして保存します。このスクリプトを実行する前に、 files.jsと同じディレクトリにtest.txtという名前のファイルを作成します。
このコードは、fs.writefile()メソッドを示しています。サーバーがリクエストを受信するたびに、スクリプトはファイルから番号を読み取り、その番号を増やし、新しい番号をファイルに書き込みます。 fs.WriteFile()メソッドは、ファイル名とデータをパラメーターとして受け入れます。また、3番目と4番目の引数(両方ともオプション)を受け入れ、それぞれエンコード関数とコールバック関数を指定します。
次のコマンドでこのスクリプトを実行しましょう。
node files.js
https://www.php.cn/link/7232a90ea7d391905f9ee07bcc7c5967のブラウザで開き、数回更新します。今、あなたはあなたのコードが2回増加しているように見えるので、あなたのコードにエラーがあると思うかもしれません。これは間違いではありません。このURLが要求されるたびに、2つのリクエストがサーバーに送信されます。最初のリクエストは、 favicon.icoを要求するブラウザによって自動的に発行されます。もちろん、2番目の要求はURL( https://www.php.cn/link/7232a90ea7d391905f9ee07bcc7c7c5967 )です。
この動作が技術的に間違っていなくても、それは私たちが望む行動ではありません。リクエストURLをチェックすることでこれを簡単に修正できます。以下は変更されたコードです。
// createServerを含める 「http」から{createserver}をインポート // "fs"からfs関数インポート{readfile、writefile} // HTTPサーバーを作成します。 createserver(function(request、response){ //リスナーをエンドイベントに添付します。 request.on( 'end'、function(){ //ユーザーがリクエストするかどうかを確認します/ if(request.url == '/'){ //ファイルを読み取ります。 readfile( 'test.txt'、 'utf-8'、function(error、data){ //ヘッダーに書き込みます。 Response.writehead(200、{ 「コンテンツタイプ」:「テキスト/プレーン」 }); //ファイルから取得した番号をインクリメントします。 data = parseint(data)1; //ファイルにインクリメント番号を書き込みます。 writefile( 'test.txt'、data); //いくつかの素敵なメッセージで応答を終了します。 Response.End( 'このページは「データ」の' time! 'を更新しました); }); } それ以外 { //要求されたファイルが見つからなかったことを示します。 Response.Writehead(404); //データを送信せずにリクエストを終了します。 Response.End(); } }); //ポート8080を聞いてください。 })。聞きます(8080);
今、それをテストする必要があります。
ほとんどの従来のサーバー側のテクノロジーには、データベースに接続して照会する方法が組み込まれています。 node.jsを使用すると、ライブラリをインストールする必要があります。このチュートリアルでは、安定して使いやすいノードMysQLを選択しました。このモジュールのフルネームはmysql @ 2.0.0-alpha2 ( @ isバージョン番号の後のすべてのコンテンツ)です。コンソールを開き、スクリプトを保存したディレクトリに移動し、次のコマンドを実行します。
NPMインストールmysql
これにより、モジュールがダウンロードされ、インストールされ、現在のディレクトリにnode_modulesフォルダーも作成されます。次のコードで使用する方法を見てみましょう。
// HTTPモジュールを含む、 「http」から{createserver}をインポート //インストールしたばかりのMySQLモジュール。 「mysql」からmysqlとしてインポート * //接続を作成します。 //データはデフォルトで新しいMySQLインストールがインストールされ、構成に応じて変更する必要があります。 const connection = mysql.createconnection({ ユーザー:「ルート」、 パスワード: ""、 データベース:「db_name」 }); // HTTPサーバーを作成します。 createserver(function(request、response){ //リスナーをエンドイベントに添付します。 request.on( 'end'、function(){ //データベースを照会します。 connection.query( 'select * from your_table;'、function(error、rows、fields){ Response.writehead(200、{ 'Content-Type': 'x-application/json' }); // JSON文字列としてデータを送信します。 // rows変数クエリの結果を保存します。 Response.End(json.Stringify(行)); }); }); //ポート8080を聞いてください。 })。聞きます(8080);
このライブラリを使用してデータベースをクエリするのは簡単です。実際のアプリケーションでは、エラー(エラーが発生した場合は未定義)を確認し、クエリの成功または障害に基づいて応答コードを送信する必要があります。また、JSONの有効なMIMEタイプであるX-Application/JSONを設定していることに注意してください。 JSON.stringify()
メソッドを使用して、行をJSON構造に変換します。
このファイルをmysql.jsとして保存して実行します(mysqlがインストールされている場合):
ノードmysql.js
https://www.php.cn/link/7232a90ea7d391905f9ee07bcc7c5967にブラウザに移動すると、JSONフォーマットファイルをダウンロードするためのプロンプトを受け取る必要があります。
node.jsには追加の作業が必要ですが、高速で強力なアプリケーションの報酬は価値があります。最低レベルですべての作業を行いたくない場合は、いつでもフレームワーク(Expressなど)を選択して、アプリケーションの開発を簡素化できます。
node.jsは有望な技術であり、高負荷アプリケーションに最適な選択肢です。 Microsoft、eBay、Yahooなどの企業はこれを証明しています。 Webサイトやアプリケーションをホストすることがわからない場合は、安価なVPSソリューションまたはMicrosoft AzureやAmazon EC2などのさまざまなクラウドベースのサービスをいつでも使用できます。どちらのサービスもリーズナブルな価格でスケーラブルな環境を提供します。
以上が初心者向けのnode.jsの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。