駆け出しエンジニアのNode Tutorial学習メモです。
解説するより見て学べ!というニュアンスのまとめとなりました。
実際にコードを読み解いていくと感覚的に理解できるはずです。
学習に使ったサイトはこちら!
→Node.js Tutorial - W3Schools
目次
1.ダウンロードからHelloWorldまで
2.モジュールとは?
3.ファイルシステムモジュール
4.URLモジュール
5.NPM
6.イベント
7.ファイルをアップロードする
8.メールを送信する
1.ダウンロードからHelloWorldまで
Node.jsをダウンロード
Node.jsの公式Webサイトには、Node.jsのインストール手順があります。
[https://nodejs.org/ja/]
入門
Node.jsをダウンロードしてコンピューターにインストールしたら、Webブラウザーに「HelloWorld」を表示してみましょう。
「hello.js」という名前のNode.jsファイルを作成し、次のコードを追加します。
これで、コンピューターがサーバーとして機能します。
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {"Content-Type": "text/plain; charset=utf-8" });
res.end('Hello World!');
}).listen(8080);
ターミナルでサーバーを起動します。
C:\Users\Your Name>node myfirst.js
インターネットブラウザを起動し、アドレスを入力します
[http://localhost:8080]
2.モジュールとは?
Node.jsのモジュールとは何ですか?
モジュールはJavaScriptライブラリと同じであると考えてください。
内蔵モジュール
Node.jsには、追加インストールなしで使用できる一連の組み込みモジュールがあります。
モジュールを含めるには、require()
の関数を使用します。
var http = require('http');
これで、アプリケーションはHTTPモジュールにアクセスできるようになり、サーバーを作成できるようになりました。
独自のモジュールを作成する
独自のモジュールを作成して、アプリケーションに簡単に含めることができます。
次の例では、日付と時刻のオブジェクトを返すモジュールを作成します。
myfirstmodule.js
//現在の日付と時刻を返すモジュールを作成します。
exports.myDateTime = function () {
return Date();
};
これで、任意のNode.jsファイルにモジュールを含めて使用できます。
3.ファイルシステムモジュール
Node.jsファイルシステムモジュールを使用すると、コンピューター上のファイルシステムを操作できます。
ファイルシステムモジュールを含めるには、次のrequire()
方法を使用します。
var fs = require('fs');
fsモジュールでは以下のようなメソッドを使用できます。
・ファイルを読む
fs.readFile()
・ファイルを作成する
fs.appendFile()
fs.open()
fs.writeFile()
・ファイルを更新する
fs.appendFile()
fs.writeFile()
・ファイルを削除する
fs.unlink()
・ファイルの名前を変更する
fs.rename()
ファイルのアップロード
Node.jsを使用してファイルをコンピューターにアップロードすることもできます。
後述する7.ファイルをアップロードするで詳しく見ていきます。
4.URLモジュール
URLモジュールは、Webアドレスを読み取り可能な部分に分割します。
URLモジュールを含めるには、次のrequire()
を使用します。
var url = require('url');
url.parse()
url.parse()
メソッドを使用してアドレスを解析すると、アドレスの各部分をプロパティとして持つURLオブジェクトが返されます。
var url = require('url');
var adr = 'http://localhost:8080/default.htm?year=2017&month=february';
var q = url.parse(adr, true);
console.log(q.host); //returns 'localhost:8080'
console.log(q.pathname); //returns '/default.htm'
console.log(q.search); //returns '?year=2017&month=february'
var qdata = q.query; //returns an object: { year: 2017, month: 'february' }
console.log(qdata.month); //returns 'february'
ファイルサーバー
クライアントから要求されたファイルを提供しましょう。
2つのhtmlファイルを作成し、url.js
ファイルと同じフォルダーに保存します。
//summer.html
<!DOCTYPE html>
<html>
<body>
<h1>Summer</h1>
<p>I love the sun!</p>
</body>
</html>
// winter.html
<!DOCTYPE html>
<html>
<body>
<h1>Winter</h1>
<p>I love the snow!</p>
</body>
</html>
要求されたファイルを開き、コンテンツをクライアントに返すNode.jsファイルを作成します。何か問題が発生した場合は、404エラーをスローします。
// demo_fileserver.js:
var http = require('http');
var url = require('url');
var fs = require('fs');
http.createServer(function (req, res) {
var q = url.parse(req.url, true);
var filename = "." + q.pathname;
fs.readFile(filename, function(err, data) {
if (err) {
res.writeHead(404, {'Content-Type': 'text/html'});
return res.end("404 Not Found");
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
return res.end();
});
}).listen(8080);
サーバーを起動します。
C:\Users\Your Name>node search.js
http:// localhost:8080 / summer.html
http:// localhost:8080 / winter.html
こちらのurlにアクセスすることで、指定したファイルをnode.jsが返してくれます。
5.NPM
NPMとは
NPMは、Node.jsパッケージ、または必要に応じてモジュールのパッケージマネージャーです。
www.npmjs.comは、ダウンロードして使用できる何千もの無料パッケージをホストしています。
Node.jsをインストールすると、NPMプログラムがコンピューターにインストールされます。
パッケージとは
Node.jsのパッケージには、モジュールに必要なすべてのファイルが含まれています。
モジュールは、プロジェクトに含めることができるJavaScriptライブラリです。
パッケージをダウンロードする
パッケージのダウンロードはとても簡単です。
コマンドラインインターフェイスを開き、必要なパッケージをダウンロードするようにNPMに指示します。
今回は、upper-case
パッケージをダウンロードしてみます。
C:\Users\Your Name>npm install upper-case
NPMは、パッケージが配置される「node_modules」という名前のフォルダーを作成します。今後インストールするすべてのパッケージは、このフォルダーに配置されます。
C:\Users\My Name\node_modules\upper-case
パッケージの使用
パッケージがインストールされると、使用できるようになります。
var http = require('http');
var uc = require('upper-case');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(uc.upperCase("Hello World!"));
res.end();
}).listen(8080);
// HELLO WORLD!
6.イベント
Node.jsは、イベント駆動型アプリケーションに最適です。
コンピューターでのすべてのアクションはイベントです。接続が確立されたときやファイルが開かれたときのように。
Node.jsのオブジェクトは、ファイルを開いたり閉じたりするときにreadStreamオブジェクトがイベントを発生させるように、イベントを発生させることができます。
Streamとは
var fs = require('fs');
var rs = fs.createReadStream('./demofile.txt');
rs.on('open', function () {
console.log('The file is open');
});
イベントモジュール
Node.jsには、「イベント」と呼ばれる組み込みモジュールがあり、独自のイベントを作成、起動、およびリッスンできます。
組み込みのEventsモジュールを含めるには、require() メソッドを使用します。さらに、すべてのイベントプロパティとメソッドは、EventEmitterオブジェクトのインスタンスです。これらのプロパティとメソッドにアクセスできるようにするには、EventEmitterオブジェクトを作成します。
var events = require('events');
var eventEmitter = new events.EventEmitter();
EventEmitterオブジェクト
EventEmitterオブジェクトを使用して、イベントハンドラーを独自のイベントに割り当てることができます。
以下の例では、「scream」イベントが発生したときに実行される関数を作成しました。
イベントを発生させるには、emit()
メソッドを使用します。
var events = require('events');
var eventEmitter = new events.EventEmitter();
//Create an event handler:
var myEventHandler = function () {
console.log('I hear a scream!');
}
//Assign the event handler to an event:
eventEmitter.on('scream', myEventHandler);
//Fire the 'scream' event:
eventEmitter.emit('scream');
7.ファイルをアップロードする
ファイルのアップロード
恐るべきモジュール
**「Formidable」**と呼ばれる、ファイルのアップロードを処理するための非常に優れたモジュールがあります。
Formidableモジュールは、NPMを使用してダウンロードおよびインストールできます。
C:\Users\Your Name>npm install formidable
Formidableモジュールをダウンロードしたら、モジュールを任意のアプリケーションに含めることができます。
これで、ユーザーがコンピューターにファイルをアップロードできるようにするWebページをNode.jsで作成する準備が整いました。
成功すると、指定したディレクトリにファイルが追加されます。
※少し複雑かもしれませんが、実行結果を確認しながら少しづつ確実に読み解いていきましょう。
var http = require('http');
// アップロードされたファイルがサーバーに到達したら解析できるように、Formidableモジュールを含めます。
var formidable = require('formidable');
var fs = require('fs');
http.createServer(function(req, res) {
if (req.url == '/fileupload') {
var form = new formidable.IncomingForm();
// ファイルがアップロードされて解析されると、コンピューターの一時フォルダーに配置されます。
// このディレクトリへのパスは、parse()メソッドのコールバック関数の3番目の引数として渡される「files」オブジェクトにあります。
form.parse(req, function(err, fields, files) {
// 選択したフォルダにファイルを移動するには、ファイルシステムモジュールを使用して、ファイルの名前を変更します。
var oldpath = files.filetoupload.path;
var newpath = '/Users/user name/開発している場所のpath/' + files.filetoupload.name;
fs.rename(oldpath, newpath, function(err) {
if (err) throw err;
res.write('File uploaded and moved!');
res.end();
});
});
} else {
// アップロードフィールドを使用して、HTMLフォームを書き込むNode.jsファイルを作成します。これが初期画面になります。
res.writeHead(200, { 'Content-Type': 'text/html' });
res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
res.write('<input type="file" name="filetoupload"><br>');
res.write('<input type="submit">');
res.write('</form>');
return res.end();
}
}).listen(8080);
8.メールを送信する
Nodemailerモジュール
Nodemailerモジュールを使用すると、コンピューターから電子メールを簡単に送信できます。
C:\Users\Your Name>npm install nodemailer
メールを送る
選択した電子メールプロバイダーのユーザー名とパスワードを使用して、電子メールを送信します。このチュートリアルでは、Gmailアカウントを使用してメールを送信する方法を説明します。
実際には送信されないでしょう。Googleセキュリティにより、不正アクセスとみなされブロックされます。
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'youremail@gmail.com',
pass: 'yourpassword'
}
});
var mailOptions = {
from: 'youremail@gmail.com',
// 複数の受信者に電子メールを送信するには、toプロパティにコンマで区切って追加します。
to: 'myfriend@yahoo.com, myotherfriend@yahoo.com',
subject: 'Sending Email using Node.js',
text: 'That was easy!'
// 電子メールでHTML形式のテキストを送信するには、「text」プロパティの代わりに「html」プロパティを使用します。
html: '<h1>Welcome</h1><p>That was easy!</p>'
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
以上です!これで、サーバーがメールを送信できるようになりました。


Congratulations 

MySQLと組み合わせて、更にNode.jsを学んで行きましょう。
こちらからどうぞ:
Node.jsアプリケーションとMySQLを接続しよう!