Node.js チュートリアル
Node.jsを使い始める
サーチ…
備考
Node.jsは、GoogleのV8 JavaScriptエンジンを使用するイベントベースの非ブロッキング非同期I / Oフレームワークです。これは、クライアント側とサーバー側の両方でJavaScriptを実行できるため、コードの再利用性とコンテキスト切り替えの欠如の恩恵を受けるアプリケーションの開発に使用されます。オープンソースとクロスプラットフォームです。 Node.jsアプリケーションは純粋なJavaScriptで書かれており、Windows、LinuxなどのNode.js環境内で実行できます。
バージョン
バージョン | 発売日 |
---|---|
v8.2.1 | 2017-07-20 |
v8.2.0 | 2017-07-19 |
v8.1.4 | 2017-07-11 |
v8.1.3 | 2017-06-29 |
v8.1.2 | 2017-06-15 |
v8.1.1 | 2017-06-13 |
v8.1.0 | 2017-06-08 |
v8.0.0 | 2017-05-30 |
v7.10.0 | 2017-05-02 |
v7.9.0 | 2017-04-11 |
v7.8.0 | 2017-03-29 |
v7.7.4 | 2017-03-21 |
v7.7.3 | 2017-03-14 |
v7.7.2 | 2017-03-08 |
v7.7.1 | 2017-03-02 |
v7.7.0 | 2017-02-28 |
v7.6.0 | 2017-02-21 |
v7.5.0 | 2017-01-31 |
v7.4.0 | 2017-01-04 |
v7.3.0 | 2016-12-20 |
v7.2.1 | 2016-12-06 |
v7.2.0 | 2016-11-22 |
v7.1.0 | 2016-11-08 |
v7.0.0 | 2016-10-25 |
v6.11.0 | 2017-06-06 |
v6.10.3 | 2017-05-02 |
v6.10.2 | 2017-04-04 |
v6.10.1 | 2017-03-21 |
v6.10.0 | 2017-02-21 |
v6.9.5 | 2017-01-31 |
v6.9.4 | 2017-01-05 |
v6.9.3 | 2017-01-05 |
v6.9.2 | 2016-12-06 |
v6.9.1 | 2016年10月19日 |
v6.9.0 | 2016年10月18日 |
v6.8.1 | 2016-10-14 |
v6.8.0 | 2016-10-12 |
v6.7.0 | 2016-09-27 |
v6.6.0 | 2016-09-14 |
v6.5.0 | 2016-08-26 |
v6.4.0 | 2016-08-12 |
v6.3.1 | 2016-07-21 |
v6.3.0 | 2016年7月6日 |
v6.2.2 | 2016年6月16日 |
v6.2.1 | 2016年06-02 |
v6.2.0 | 2016年5月17日 |
v6.1.0 | 2016-05-05 |
v6.0.0 | 2016-04-26 |
v5.12.0 | 2016年6月23日 |
v5.11.1 | 2016-05-05 |
v5.11.0 | 2016-04-21 |
v5.10.1 | 2016-04-05 |
v5.10 | 2016-04-01 |
v5.9 | 2016-03-16 |
v5.8 | 2016-03-09 |
v5.7 | 2016-02-23 |
v5.6 | 2016-02-09 |
v5.5 | 2016-01-21 |
v5.4 | 2016-01-06 |
v5.3 | 2015-12-15 |
v5.2 | 2015-12-09 |
v5.1 | 2015-11-17 |
v5.0 | 2015-10-29 |
v4.4 | 2016-03-08 |
v4.3 | 2016-02-09 |
v4.2 | 2015-10-12 |
v4.1 | 2015-09-17 |
v4.0 | 2015-09-08 |
io.js v3.3 | 2015-09-02 |
io.js v3.2 | 2015-08-25 |
io.js v3.1 | 2015-08-19 |
io.js v3.0 | 2015-08-04 |
io.js v2.5 | 2015-07-28 |
io.js v2.4 | 2015-07-17 |
io.js v2.3 | 2015-06-13 |
io.js v2.2 | 2015-06-01 |
io.js v2.1 | 2015-05-24 |
io.js v2.0 | 2015-05-04 |
io.js v1.8 | 2015-04-21 |
io.js v1.7 | 2015-04-17 |
io.js v1.6 | 2015-03-20 |
io.js v1.5 | 2015-03-06 |
io.js v1.4 | 2015-02-27 |
io.js v1.3 | 2015-02-20 |
io.js v1.2 | 2015-02-11 |
io.js v1.1 | 2015-02-03 |
io.js v1.0 | 2015-01-14 |
v0.12 | 2016-02-09 |
v0.11 | 2013-03-28 |
v0.10 | 2013-03-11 |
v0.9 | 2012-07-20 |
v0.8 | 2012-06-22 |
v0.7 | 2012-01-17 |
v0.6 | 2011年11月4日 |
v0.5 | 2011-08-26 |
v0.4 | 2011-08-26 |
v0.3 | 2011-08-26 |
v0.2 | 2011-08-26 |
v0.1 | 2011-08-26 |
Hello World HTTPサーバー
まず、ご使用のプラットフォーム用のNode.jsをインストールします。
この例では、 Hello, World!
を送信するポート1337でリッスンするHTTPサーバーを作成しますHello, World!
ブラウザに送信します。ポート1337を使用する代わりに、他のサービスで現在使用されていない任意のポート番号を使用できます。
http
モジュールはNode.js コアモジュール (Node.jsのソースに含まれ、追加のリソースのインストールを必要としないモジュール)です。 http
モジュールは、 http.createServer()
メソッドを使用してHTTPサーバーを作成する機能を提供します。アプリケーションを作成するには、次のJavaScriptコードを含むファイルを作成します。
const http = require('http'); // Loads the http module
http.createServer((request, response) => {
// 1. Tell the browser everything is OK (Status code 200), and the data is in plain text
response.writeHead(200, {
'Content-Type': 'text/plain'
});
// 2. Write the announced text to the body of the page
response.write('Hello, World!\n');
// 3. Tell the server that all of the response headers and body have been sent
response.end();
}).listen(1337); // 4. Tells the server what port to be on
任意のファイル名でファイルを保存します。この場合、 hello.js
という名前を付けると、ファイルがあるディレクトリに移動して次のコマンドを実行することで、アプリケーションを実行できます。
node hello.js
作成されたサーバーは、ブラウザーでURL http:// localhost:1337またはhttp://127.0.0.1:1337でアクセスできます。
以下のスクリーンショットに示すように、上部に「Hello、World!」テキストが表示された簡単なWebページが表示されます。
Hello Worldコマンドライン
Node.jsは、コマンドラインユーティリティの作成にも使用できます。以下の例は、コマンドラインから最初の引数を読み込み、Helloメッセージを出力します。
このコードをUnixシステムで実行するには:
- 新しいファイルを作成し、以下のコードを貼り付けます。ファイル名は無関係です。
- このファイルを
chmod 700 FILE_NAME
実行可能にする - アプリを
./APP_NAME David
実行する
Windowsでは、ステップ1を実行し、 node APP_NAME David
それを実行しnode APP_NAME David
#!/usr/bin/env node
'use strict';
/*
The command line arguments are stored in the `process.argv` array,
which has the following structure:
[0] The path of the executable that started the Node.js process
[1] The path to this application
[2-n] the command line arguments
Example: [ '/bin/node', '/path/to/yourscript', 'arg1', 'arg2', ... ]
src: https://nodejs.org/api/process.html#process_process_argv
*/
// Store the first argument as username.
var username = process.argv[2];
// Check if the username hasn't been provided.
if (!username) {
// Extract the filename
var appName = process.argv[1].split(require('path').sep).pop();
// Give the user an example on how to use the app.
console.error('Missing argument! Example: %s YOUR_NAME', appName);
// Exit the app (success: 0, error: 1).
// An error will stop the execution chain. For example:
// ./app.js && ls -> won't execute ls
// ./app.js David && ls -> will execute ls
process.exit(1);
}
// Print the message to the console.
console.log('Hello %s!', username);
Node.jsのインストールと実行
まず、開発用コンピュータにNode.jsをインストールします。
Windows: ダウンロードページに移動し、インストーラをダウンロード/実行します。
Mac: ダウンロードページに移動し、インストーラをダウンロード/実行します。または、 brew install node
を使用してHomebrew経由でNodeをインストールすることもできbrew install node
。 HomebrewはMacintosh向けのコマンドラインパッケージマネージャであり、詳細はHomebrewのWebサイトを参照してください 。
Linux: コマンドラインのインストールページでディストリビューションの指示に従ってください 。
ノードプログラムの実行
Node.jsプログラムを実行するには、 node app.js
またはnodejs app.js
実行しnode app.js
。ここで、 app.js
は、ノードappのソースコードのファイル名です。実行するスクリプトを見つけるためにNodeに.js
接尾辞を含める必要はありません。
あるいは、UNIXベースのオペレーティングシステムでは、ノードプログラムを端末スクリプトとして実行することができます。これを行うには、 #!/usr/bin/env node
ようなNodeインタプリタを指すシバンで始める必要があり#!/usr/bin/env node
。このファイルも実行可能ファイルとして設定する必要があります。これはchmod
を使って行うことができます。スクリプトはコマンドラインから直接実行できるようになりました。
オンラインでアプリケーションを展開する
アプリケーションを(Node.js固有の)ホスト環境にデプロイすると、この環境では通常、サーバーを実行するために使用できるPORT
環境変数が提供されます。 process.env.PORT
ポート番号を変更すると、アプリケーションにアクセスできます。
例えば、
http.createServer(function(request, response) {
// your server code
}).listen(process.env.PORT);
また、デバッグ中にオフラインでアクセスしたい場合は、次のようにしてください:
http.createServer(function(request, response) {
// your server code
}).listen(process.env.PORT || 3000);
ここで、 3000
はオフラインポート番号です。
NodeJSアプリケーションのデバッグ
ノードインスペクタを使用することができます。 npm経由でインストールするには、次のコマンドを実行します。
npm install -g node-inspector
次に、あなたはアプリケーションをデバッグすることができます
node-debug app.js
Githubのリポジトリはhttps://github.com/node-inspector/node-inspectorにあります。
ネイティブにデバッグする
また、次のようにnode.jsをネイティブにデバッグすることもできます。
node debug your-script.js
デバッガを目的のコード行で正確にブレークするには、次のようにします。
debugger;
node.js 8では、次のコマンドを使用します。
node --inspect-brk your-script.js
次に、Google Chromeの最新バージョンでabout://inspect
開き、Nodeスクリプトを選択してChromeのDevToolsのデバッグ環境を取得します。
エクスプローラー付きのHello World
次の例では、Expressを使用してポート3000でリッスンするHTTPサーバーを作成します。このサーバーは「Hello、World!」と応答します。 Expressは、HTTP APIを作成するのに便利な一般的なWebフレームワークです。
最初に、 myApp
新しいフォルダを作成します。 myApp
入り、次のコードを含む新しいJavaScriptファイルを作成します(たとえば、 hello.js
という名前を付けてhello.js
)。次に、コマンドラインからnpm install --save express
を使用してExpressモジュールをインストールします。 パッケージのインストール方法の詳細については、 このドキュメントを参照してください 。
// Import the top-level function of express
const express = require('express');
// Creates an Express application using the top-level function
const app = express();
// Define port number as 3000
const port = 3000;
// Routes HTTP GET requests to the specified path "/" with the specified callback function
app.get('/', function(request, response) {
response.send('Hello, World!');
});
// Make the app listen on port 3000
app.listen(port, function() {
console.log('Server listening on http://localhost:' + port);
});
コマンドラインから次のコマンドを実行します。
node hello.js
ブラウザを開き、 http://localhost:3000
またはhttp://127.0.0.1:3000
して、応答を確認します。
Expressフレームワークの詳細については、「 Web Apps with Express」セクションをチェックしてください
Hello World基本ルーティング
ノードを持つHTTPサーバーを作成する方法を理解したら、ユーザーがナビゲートしたパスに基づいて物事を「行う」方法を理解することが重要です。この現象を「ルーティング」といいます。
これの最も基本的な例はif (request.url === 'some/path/here')
をチェックし、新しいファイルで応答する関数を呼び出すことです。
これの例はここで見ることができます:
const http = require('http');
function index (request, response) {
response.writeHead(200);
response.end('Hello, World!');
}
http.createServer(function (request, response) {
if (request.url === '/') {
return index(request, response);
}
response.writeHead(404);
response.end(http.STATUS_CODES[404]);
}).listen(1337);
しかし、このような "ルート"を定義し続けると、大規模なコールバック関数が1つだけ発生することになります。そのような巨大な混乱を望んでいないので、これをクリーンアップできるかどうかを見てみましょう。
まず、すべてのルートをオブジェクトに保存しましょう:
var routes = {
'/': function index (request, response) {
response.writeHead(200);
response.end('Hello, World!');
},
'/foo': function foo (request, response) {
response.writeHead(200);
response.end('You are now viewing "foo"');
}
}
オブジェクトに2つのルートを格納したので、ここで主なコールバックでそれらをチェックできます:
http.createServer(function (request, response) {
if (request.url in routes) {
return routes[request.url](request, response);
}
response.writeHead(404);
response.end(http.STATUS_CODES[404]);
}).listen(1337);
今すぐあなたのウェブサイトをナビゲートしようとするたびに、あなたのルートにそのパスの存在を確認し、それぞれの機能を呼び出します。ルートが見つからない場合、サーバーは404(Not Found)で応答します。
また、HTTP Server APIを使用したルーティングは非常に簡単です。
TLSソケット:サーバーとクライアント
これと通常のTCP接続との主な違いは、プライベートキーとオプションオブジェクトに設定する必要があるパブリック証明書だけです。
キーと証明書を作成する方法
このセキュリティプロセスの第一歩は、プライベートキーの作成です。そしてこの秘密鍵は何ですか?基本的には、情報の暗号化に使用されるランダムノイズのセットです。理論的には、1つの鍵を作成し、それを使って必要なものを暗号化することができます。しかし、特定のものに対して異なるキーを持つことがベストプラクティスです。誰かがあなたの秘密鍵を盗むと、それはあなたの家の鍵を盗むことに似ています。あなたが車、ガレージ、オフィスなどをロックするために同じキーを使用した場合を想像してください。
openssl genrsa -out private-key.pem 1024
秘密鍵を取得したら、証明書署名要求(CSR)を作成することができます。この要求は、秘密鍵が秘密の機関に署名されていることを要求しています。だからあなたの会社に関連する情報を入力する必要があります。この情報は署名当局に表示され、あなたの確認に使用されます。私たちの場合、あなたが入力したものは問題ではありません。次のステップでは、証明書に署名するつもりであるからです。
openssl req -new -key private-key.pem -out csr.pem
ペーパーワークを完成させたら、我々はクールな署名機関であるとふるまうべき時です。
openssl x509 -req -in csr.pem -signkey private-key.pem -out public-cert.pem
プライベートキーとパブリック証明書を取得したので、2つのNodeJSアプリ間の安全な接続を確立できます。そして、サンプルコードでわかるように、非常に単純なプロセスです。
重要!
私たちは公然の証明書を作成して以来、まったく正直なところ、証明書は無価値です。 NodeJSサーバーはデフォルトでこのような証明書を信頼しません。そのため、次のオプションrejectUnauthorized:falseを使用して証明書を実際に信頼するように伝える必要があります。 非常に重要 :本番環境ではこの変数をtrueに設定しないでください。
TLSソケットサーバー
'use strict';
var tls = require('tls');
var fs = require('fs');
const PORT = 1337;
const HOST = '127.0.0.1'
var options = {
key: fs.readFileSync('private-key.pem'),
cert: fs.readFileSync('public-cert.pem')
};
var server = tls.createServer(options, function(socket) {
// Send a friendly message
socket.write("I am the server sending you a message.");
// Print the data that we received
socket.on('data', function(data) {
console.log('Received: %s [it is %d bytes long]',
data.toString().replace(/(\n)/gm,""),
data.length);
});
// Let us know when the transmission is over
socket.on('end', function() {
console.log('EOT (End Of Transmission)');
});
});
// Start listening on a specific port and address
server.listen(PORT, HOST, function() {
console.log("I'm listening at %s, on port %s", HOST, PORT);
});
// When an error occurs, show it.
server.on('error', function(error) {
console.error(error);
// Close the connection after the error occurred.
server.destroy();
});
TLSソケットクライアント
'use strict';
var tls = require('tls');
var fs = require('fs');
const PORT = 1337;
const HOST = '127.0.0.1'
// Pass the certs to the server and let it know to process even unauthorized certs.
var options = {
key: fs.readFileSync('private-key.pem'),
cert: fs.readFileSync('public-cert.pem'),
rejectUnauthorized: false
};
var client = tls.connect(PORT, HOST, options, function() {
// Check if the authorization worked
if (client.authorized) {
console.log("Connection authorized by a Certificate Authority.");
} else {
console.log("Connection not authorized: " + client.authorizationError)
}
// Send a friendly message
client.write("I am the client sending you a message.");
});
client.on("data", function(data) {
console.log('Received: %s [it is %d bytes long]',
data.toString().replace(/(\n)/gm,""),
data.length);
// Close the connection after receiving the message
client.end();
});
client.on('close', function() {
console.log("Connection closed");
});
// When an error ocoures, show it.
client.on('error', function(error) {
console.error(error);
// Close the connection after the error occurred.
client.destroy();
});
REPLのHello World
引数なしで呼び出されると、Node.jsは " ノードシェル "とも呼ばれるREPL(Read-Eval-Print-Loop)を開始します。
コマンドプロンプトでnode
入力しnode
。
$ node
>
ノードのシェルプロンプトで>
タイプの「Hello World!」
$ node
> "Hello World!"
'Hello World!'
コアモジュール
Node.jsはブラウザ外でJavascriptを実行できるJavascriptエンジン(GoogleのChrome用V8エンジン、C ++で書かれています)です。ノードの機能を拡張するために多数のライブラリが利用可能ですが、エンジンには基本機能を実装する一連のコアモジュールが付属しています。
現在、34個のコアモジュールがノードに含まれています:
[ 'assert',
'buffer',
'c/c++_addons',
'child_process',
'cluster',
'console',
'crypto',
'deprecated_apis',
'dns',
'domain',
'Events',
'fs',
'http',
'https',
'module',
'net',
'os',
'path',
'punycode',
'querystring',
'readline',
'repl',
'stream',
'string_decoder',
'timers',
'tls_(ssl)',
'tracing',
'tty',
'dgram',
'url',
'util',
'v8',
'vm',
'zlib' ]
このリストは、Node documentation API https://nodejs.org/api/all.html(JSONファイル: https : //nodejs.org/api/all.json )から入手しました。
すべてのコアモジュールを一目で見る
アサート
assert
モジュールは不変をテストするために使用することができるアサーションテストの簡単なセットを提供します。
バッファ
ECMAScript 2015(ES6)にTypedArray
を導入する前は、JavaScript言語にはバイナリデータのストリームを読み込んだり操作したりする仕組みがありませんでした。 Buffer
クラスは、Node.js APIの一部として導入され、TCPストリームやファイルシステム操作などのコンテキストでオクテットストリームとやり取りできるようにしました。
TypedArray
がES6で追加されたので、 Buffer
クラスは、Node.jsのユースケースに合わせて最適化された方法でUin t8Array
APIを実装します。
c / c ++ _ addons
Node.js Addonsは、CまたはC ++で書かれた動的にリンクされた共有オブジェクトで、 require()
関数を使用してNode.jsにロードでき、通常のNode.jsモジュールと同じように使用できます。主に、Node.jsで実行されているJavaScriptとC / C ++ライブラリとの間のインタフェースを提供するために使用されます。
child_process
child_process
モジュールは、popen(3)に類似しているが同一ではない方法で子プロセスを生成する機能を提供します。
Node.jsの単一のインスタンスは、単一のスレッドで実行されます。マルチコアシステムを利用するには、負荷を処理するNode.jsプロセスのクラスタを起動する必要があることがあります。クラスタモジュールを使用すると、すべてのサーバーポートを共有する子プロセスを簡単に作成できます。
コンソール
console
モジュールは、ウェブブラウザによって提供されるJavaScriptコンソール機構と同様の単純なデバッグコンソールを提供する。
暗号
crypto
モジュールは、OpenSSLのハッシュ、HMAC、暗号、解読、署名、検証機能用のラッパーセットを含む暗号機能を提供します。
deprecated_apis
(a)APIの使用が危険であると考えられているか、(b)改良された代替APIが利用可能になっている、(c)将来のメジャーリリースでAPIへの変更の破棄が予想される場合、Node.jsはAPIを非難することがあります。
DNS
dns
モジュールには、2つの異なるカテゴリに属する関数が含まれています。
- 基本的なオペレーティングシステム機能を使用して名前解決を実行する機能で、必ずしもネットワーク通信を実行する必要はありません。このカテゴリに含まれる関数は、
dns.lookup()
です。 - 実際のDNSサーバーに接続して名前解決を実行し、 常にネットワークを使用してDNSクエリを実行する関数。このカテゴリには、
dns.lookup()
を除くdns
モジュール内のすべての関数が含まれます。
ドメイン
このモジュールは保留中です 。置換APIが完成すると、このモジュールは完全に廃止されます。ほとんどのエンドユーザーは、このモジュールを使用する必要はありません 。ドメインが提供する機能を絶対に必要とするユーザーは、当面はその機能に頼っているかもしれませんが、将来は別のソリューションに移行する必要があります。
Node.jsコアAPIの多くは、特定の種類のオブジェクト(「エミッタ」と呼ばれます)が定期的に名前付きイベントを生成し、Functionオブジェクト(「リスナー」)を呼び出すような慣用的な非同期イベント駆動アーキテクチャをベースに構築されています。
fs
ファイルI / Oは、標準のPOSIX関数に関する単純なラッパーによって提供されます。このモジュールを使用するには、 require('fs')
ます。すべてのメソッドは、非同期形式と同期形式を持ちます。
Node.jsのHTTPインタフェースは、従来使用が困難であったプロトコルの多くの機能をサポートするように設計されています。特に、チャンクエンコードされた大規模なメッセージ。このインターフェースは、リクエストやレスポンス全体をバッファリングしないように注意しています。ユーザーはデータをストリーミングすることができます。
https
HTTPSは、TLS / SSL上のHTTPプロトコルです。 Node.jsでは、これは別のモジュールとして実装されています。
モジュール
Node.jsには単純なモジュールローディングシステムがあります。 Node.jsでは、ファイルとモジュールは1対1で対応しています(各ファイルは個別のモジュールとして扱われます)。
ネット
net
モジュールは、非同期ネットワークラッパーを提供します。サーバーとクライアントの両方を作成するための関数(ストリームと呼ばれます)が含まれています。このモジュールにはrequire('net');
を含めることができますrequire('net');
。
OS
os
モジュールは、多くのオペレーティングシステム関連のユーティリティメソッドを提供します。
パス
path
モジュールは、ファイルおよびディレクトリパスを操作するためのユーティリティを提供します。
punycode
Node.jsにバンドルされているpunycodeモジュールのバージョンは廃止予定です 。
クエリ文字列
querystring
モジュールは、URLクエリ文字列の解析と書式設定のためのユーティリティを提供します。
readline
モジュールは、Readableストリーム( process.stdin
など)から一度に1行ずつデータを読み込むためのインターフェイスを提供します。
repl
repl
モジュールは、スタンドアロン・プログラムとしても、他のアプリケーションでも使用可能なRead-Eval-Print-Loop(REPL)実装を提供します。
ストリームは、Node.jsのストリーミングデータを操作するための抽象的なインターフェイスです。 stream
モジュールは、ストリームインターフェイスを実装するオブジェクトを簡単に構築できる基本APIを提供します。
Node.jsによって提供される多くのストリームオブジェクトがあります。例えば、HTTPサーバとprocess.stdout
へのリクエストは両方ともストリームインスタンスです。
string_decoder
string_decoder
モジュールは、エンコードされたマルチバイトUTF-8およびUTF-16文字を保持する方法で、 Buffer
オブジェクトをストリングにデコードするためのAPIを提供します。
タイマー
timer
モジュールは、ある将来の期間に呼び出されるスケジューリング関数用のグローバルAPIを公開します。タイマー関数はグローバルであるため、APIを使用するrequire('timers')
timer require('timers')
を呼び出すrequire('timers')
はありません。
Node.js内のタイマー関数は、Webブラウザーで提供されるタイマーAPIと同様のAPIを実装しますが、Node.jsイベントループの周りに構築された別の内部実装を使用します 。
tls_(ssl)
tls
モジュールは、OpenSSLの上に構築されたTLS(Transport Layer Security)およびSSL(Secure Socket Layer)プロトコルの実装を提供します。
トレース
トレースイベントは、V8、ノードコア、およびユーザー空間コードによって生成されたトレース情報を集中管理するメカニズムを提供します。
Node.jsアプリケーションの起動時に--trace-events-enabled
フラグを渡すと、トレースを有効にすることができます。
tty
tty
モジュールは提供tty.ReadStream
とtty.WriteStream
クラスを。ほとんどの場合、このモジュールを直接使用する必要はありません。
dgram
dgram
モジュールは、UDPデータグラムソケットの実装を提供します。
URL
url
モジュールは、URL解決と解析のためのユーティリティを提供します。
ユーティリティ
util
モジュールは、主にNode.js自身の内部APIのニーズをサポートするように設計されています。しかし、ユーティリティの多くは、アプリケーション開発者やモジュール開発者にとっても有用です。
v8
v8
モジュールは、Node.jsバイナリに組み込まれているV8のバージョンに特有のAPIを公開しています。
注 :APIと実装はいつでも変更されることがあります。
VM
vm
モジュールは、V8仮想マシンのコンテキスト内でコードをコンパイルおよび実行するためのAPIを提供します。 JavaScriptコードはすぐにコンパイルして実行することも、コンパイルして保存して後で実行することもできます。
注 :vmモジュールはセキュリティ機構ではありません。 信頼できないコードの実行には使用しないでください 。
zlib
zlib
モジュールは、GzipとDeflate / Inflateを使用して実装された圧縮機能を提供します。
基本的なHTTPS Webサーバーを起動して実行する方法
システムにnode.jsがインストールされたら、以下の手順に従って、HTTPとHTTPSの両方をサポートしている基本Webサーバーを稼働させることができます。
手順1:認証局を構築する
キーと証明書を保存するフォルダを作成します。
mkdir conf
そのディレクトリに移動します:
cd conf
この
ca.cnf
ファイルを取得して設定ショートカットとして使用する:wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/ca.cnf
この構成を使用して新しい認証局を作成します。
openssl req -new -x509 -days 9999 -config ca.cnf -keyout ca-key.pem -out ca-cert.pem
ca-key.pem
とca-cert.pem
に認証局があるので、サーバーの秘密鍵を生成しましょう:openssl genrsa -out key.pem 4096
この
server.cnf
ファイルを取得して設定ショートカットとして使用します。wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/server.cnf
次の設定を使用して証明書署名要求を生成します。
openssl req -new -config server.cnf -key key.pem -out csr.pem
リクエストに署名してください:
openssl x509 -req -extfile server.cnf -days 999 -passin "pass:password" -in csr.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem
手順2:証明書をルート証明書としてインストールする
証明書をルート証明書のフォルダにコピーします。
sudo cp ca-crt.pem /usr/local/share/ca-certificates/ca-crt.pem
CAストアを更新する:
sudo update-ca-certificates
手順3:ノードサーバーの起動
まず、実際のサーバーコードを含むserver.js
ファイルを作成します。
Node.jsのHTTPSサーバーの最小限の設定は、次のようになります。
var https = require('https');
var fs = require('fs');
var httpsOptions = {
key: fs.readFileSync('path/to/server-key.pem'),
cert: fs.readFileSync('path/to/server-crt.pem')
};
var app = function (req, res) {
res.writeHead(200);
res.end("hello world\n");
}
https.createServer(httpsOptions, app).listen(4433);
httpリクエストをサポートしたい場合は、この小さな変更を行う必要があります。
var http = require('http');
var https = require('https');
var fs = require('fs');
var httpsOptions = {
key: fs.readFileSync('path/to/server-key.pem'),
cert: fs.readFileSync('path/to/server-crt.pem')
};
var app = function (req, res) {
res.writeHead(200);
res.end("hello world\n");
}
http.createServer(app).listen(8888);
https.createServer(httpsOptions, app).listen(4433);
server.js
があるディレクトリに移動します:cd /path/to
server.js
実行しserver.js
。node server.js