1. Node.jsのコマンド
↑キーで前のコマンドに素早く移動できます
tabキーでファイルパスを自動補完できます
escキーでコマンドをクリアできます
clsコマンドでターミナルをクリアできます
2. ファイルシステムモジュール
fileSystemモジュールはNode.jsが提供するファイル操作用のモジュールで、ファイル操作に必要なメソッドとプロパティを提供しています
fileSystem.readFile()メソッドで指定ファイルの内容を読み取ります
fileSystem.writeFile()メソッドで指定ファイルに内容を書き込みます
使用するにはfileSystemモジュールをインポートする必要があります
例:const fileSystem = require('fs');
2.1 fileSystem.readFile()の構文形式
//1. fileSystemモジュールをインポート
const fileSystem = require('fs');
//2. fileSystem.readFile()メソッドを呼び出してファイルを読み取る
//パラメータ1:読み取るファイルのパス
//パラメータ2:読み取り時のエンコーディング形式、通常utf8を指定
//パラメータ3:コールバック関数、読み取りの成功/失敗結果を取得
fileSystem.readFile('./files/11.txt', 'utf8', function(error, dataStr) {
console.log(error);
//読み取り成功時はerrorがnull
//読み取り失敗時はerrorがエラーオブジェクト、dataStrはundefined
console.log('***********');
console.log(dataStr);
})
ファイル読み取りの成功判定
const fileSystem = require('fs');
fileSystem.readFile('./files/1.txt', 'utf8', function(error, dataStr) {
if (error) {
return console.log('ファイル読み取り失敗!' + error.message);
}
console.log('ファイル読み取り成功' + dataStr);
})
2.2 fileSystem.writeFile()
注意:fileSystem.writeFile()メソッドはファイル作成のみ可能で、パス作成はできません
繰り返し呼び出すと新しい内容が古い内容を上書きします
const fileSystem = require('fs');
//パラメータ1:ファイルの保存パス
//パラメータ2:書き込む内容
//パラメータ3:コールバック関数
fileSystem.writeFile('f:./files/2.txt', 'abcd', function(error) {
//ファイル書き込み成功時、errorはnull
//ファイル書き込み失敗時、errorはエラーオブジェクト
console.log(error);
})
const fileSystem = require('fs');
//パラメータ1:ファイルの保存パス
//パラメータ2:書き込む内容
//パラメータ3:コールバック関数
fileSystem.writeFile('./files/3.txt', 'abcd', function(error) {
//ファイル書き込み成功時、errorはnull
//ファイル書き込み失敗時、errorはエラーオブジェクト
if (error) {
return console.log(('ファイル書き込み失敗' + error.message));
}
console.log('ファイル書き込み成功');
})
2.3 fileSystemモジュールのパス動的結合の問題
__dirnameは現在のファイルが存在するディレクトリを示します
//__dirnameは現在のファイルが存在するディレクトリを示します
const fileSystem = require('fs');
fileSystem.readFile(__dirname + '/files/1.txt', 'utf8', function(error, dataStr) {
if (error) {
return console.log('ファイル読み取りエラー!' + error.message);
}
console.log(dataStr);
})
3. パスモジュール
pathModule.join()メソッドは複数のパスセグメントを1つの完全なパス文字列に結合します
pathModule.basename()メソッドはパス文字列からファイル名を解析します
インポート:
const pathModule = require('path');
pathModule.join()メソッドは複数のパスセグメントを1つの完全なパス文字列に結合します
const pathModule = require('path');
const fileSystem = require('fs');
//注意:../は前のパスを相殺します
const pathStr = pathModule.join('/a', '/b/c', '../', '/d', 'e');
console.log(pathStr);
// fileSystem.readFile(pathModule.join(__dirname, './files/1.txt'), 'utf8', function(error, dataStr) {
// if (error) {
// return console.log(error.message);
// }
// console.log(dataStr);
// })
pathModule.basename()メソッドはパス文字列からファイル名を解析します
const pathModule = require('path');
//ファイルの保存パスを定義
const filePath = '/a/b/c/index.html';
// const fullName = pathModule.basename(filePath);
// console.log(fullName);//index.html
const nameWithoutExt = pathModule.basename(filePath, '.html');
console.log(nameWithoutExt);//index
pathModule.extname()はパスの拡張子部分を取得できます
const pathModule = require('path');
//ファイルの保存パスを定義
const filePath = '/a/b/c/index.html';
const fileExt = pathModule.extname(filePath);
console.log(fileExt);//.html
4. HTTPモジュール
const webServer = require('http');
基本的なウェブサーバーの作成
//1. httpモジュールをインポート
const webServer = require('http');
//2. ウェブサーバーインスタンスを作成
const serverInstance = webServer.createServer();
//3. サーバーインスタンスにrequestイベントをバインドし、クライアントのリクエストを監視
serverInstance.on('request', function(clientRequest, serverResponse) {
console.log('誰かが私たちのウェブサーバーにアクセスしました。');
})
//4. サーバーを起動
serverInstance.listen(80, function() {
console.log('サーバーはhttp://127.0.0.1で実行中');
})
4.1 clientRequestオブジェクト
サーバーがクライアントのリクエストを受け取ると、serverInstance.on()でバインドされたrequestイベントハンドラが呼び出されます。イベントハンドラ内でクライアントに関連するデータや属性にアクセスするには、以下の方法を使用できます
const webServer = require('http');
const serverInstance = webServer.createServer();
//clientRequestはリクエストオブジェクトで、クライアント関連のデータと属性を含みます
serverInstance.on('request', (clientRequest) => {
//clientRequest.urlはクライアントリクエストのURLアドレス
const url = clientRequest.url;
//clientRequest.methodはクライアントリクエストのメソッドタイプ
const method = clientRequest.method;
const str = `リクエストURLは${url}、リクエストメソッドは${method}`;
console.log(str);
});
serverInstance.listen(80, () => {
console.log('サーバーはhttp://127.0.0.1で実行中');
})
4.2 serverResponseオブジェクト
サーバーのrequestイベントハンドラ内で、サーバーに関連するデータや属性にアクセスするには、以下の方法を使用できます
const webServer = require('http');
const serverInstance = webServer.createServer();
//clientRequestはリクエストオブジェクトで、クライアント関連のデータと属性を含みます
serverInstance.on('request', (clientRequest, serverResponse) => {
//clientRequest.urlはクライアントリクエストのURLアドレス
const url = clientRequest.url;
//clientRequest.methodはクライアントリクエストのメソッドタイプ
const method = clientRequest.method;
const str = `リクエストURLは${url}、リクエストメソッドは${method}`;
console.log(str);
//serverResponse.end()メソッドを呼び出し、クライアントにコンテンツを応答
serverResponse.end(str);
});
serverInstance.listen(80, () => {
console.log('サーバーはhttp://127.0.0.1で実行中');
})
4.3 中文文字化け問題の解決
const webServer = require('http');
const serverInstance = webServer.createServer();
serverInstance.on('request', (clientRequest, serverResponse) => {
const url = clientRequest.url;
const method = clientRequest.method;
const str = `リクエストURLは${url}、リクエストメソッドは${method}`;
//serverResponse.setHeader()メソッドを呼び出し、Content-Typeレスポンスヘッダーを設定し、中国語文字化け問題を解決
serverResponse.setHeader('Content-Type', 'text/html; charset=utf-8')
serverResponse.end(str);
})
serverInstance.listen(80, () => {
console.log('サーバーはhttp://127.0.0.1で実行中');
})
4.4 異なるURLに応じて異なるHTMLコンテンツを応答
const webServer = require('http');
const serverInstance = webServer.createServer();
serverInstance.on('request', (clientRequest, serverResponse) => {
//1. リクエストURLアドレスを取得
const url = clientRequest.url;
//2. デフォルトの応答コンテンツを404 Not foundに設定
let content = '<h1>404 Not found!</h1>';
//3. ユーザーが/または/index.htmlホームページをリクエストしているかどうかを判断
if (url === '/' || url === '/index.html') {
content = '<h1>ホームページ</h1>'
} else if (url === '/about.html') {
content = '<h1>アバウトページ</h1>'
}
//4. ユーザーが/about.htmlページをリクエストしているかどうかを判断
//5. レスポンスヘッダーを設定し、文字化けを防止
serverResponse.setHeader('Content-Type', 'text/html; charset=utf-8')
//6. serverResponse.end()を使用してコンテンツをクライアントに応答
serverResponse.end(content);
});
serverInstance.listen(80, () => {
console.log('サーバーはhttp://127.0.0.1で実行中');
})
5. 統合時計ケース
//1. httpモジュールをインポート
const webServer = require('http');
//1.2 fileSystemモジュールをインポート
const fileSystem = require('fs');
//1.3 pathモジュールをインポート
const pathModule = require('path');
//2.1 ウェブサーバーを作成
const serverInstance = webServer.createServer();
//2.2 ウェブサーバーのrequestイベントを監視
serverInstance.on('request', (clientRequest, serverResponse) => {
//3.1 クライアントリクエストのURLアドレスを取得
const url = clientRequest.url;
//3.2 リクエストURLアドレスを具体的なファイルパスにマッピング
// const filePath = pathModule.join(__dirname, url)
//5.1 空のファイルパスを予約
let filePath = '';
if (url === '/') {
filePath = pathModule.join(__dirname, '/clock/index.html')
} else {
filePath = pathModule.join(__dirname, '/clock', url);
}
//4.1 マッピングされたファイルパスに基づいてファイル内容を読み取る
fileSystem.readFile(filePath, 'utf-8', (error, dataStr) => {
//4.2 読み取り失敗時、クライアントに固定エラーメッセージを応答
if (error) return serverResponse.end('404 Not found!')
//4.3 読み取り成功時、読み取り成功した内容をクライアントに応答
serverResponse.end(dataStr);
})
})
//2.3 サーバーを起動
serverInstance.listen(80, function() {
console.log('サーバーはhttp://127.0.0.1で実行中');
})
6. require()メソッド
require()メソッドを使用して他のモジュールをロードすると、ロードされたモジュールのコードが実行されます
注意:requireでユーザー定義モジュールをロードする際、.js拡張子を省略できます
7. モジュールスコープ
- 関数スコープと同様に、カスタムモジュールで定義された変数、メソッドなどのメンバーは、現在のモジュール内でのみアクセスできます。このモジュールレベルのアクセス制限をモジュールスコープと呼びます
- グローバル変数汚染を防止
8. モジュールスコープのメンバーを外部に共有
- カスタムモジュールにはすべてmoduleオブジェクトがあり、現在のモジュールに関する情報を保存しています
- カスタムモジュール内でmodule.exportsオブジェクトを使用して、モジュール内のメンバーを外部に共有し、外部で使用できるようにします。カスタムモジュールをインポートすると、module.exportsが指すオブジェクトが取得されます。
- デフォルトでは、exportsとmodule.exportsは同じオブジェクトを指しています。最終的な共有結果は、module.exportsが指すオブジェクトを基準とします。
8.1 module.exportsオブジェクト
カスタムモジュール内では、デフォルトでmodule.exports = {}です
9. モジュール化仕様
- 各モジュール内で、module変数は現在のモジュールを表します
- module変数はオブジェクトで、module.exportsは外部インターフェースです
- あるモジュールをロードするとは、そのモジュールのmodule.exportsプロパティをロードすることです
10. npmとパッケージ
パッケージ:サードパーティモジュールをパッケージと呼びます
パッケージは組み込みモジュールをベースにパッケージ化されています