0
0

More than 3 years have passed since last update.

Node.js モジュール?なにそれおいしいの?

Last updated at Posted at 2021-08-15

駆け出しエンジニアの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ファイルを作成し、次のコードを追加します。
これで、コンピューターがサーバーとして機能します。

hello.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モジュールにアクセスできるようになり、サーバーを作成できるようになりました。

独自のモジュールを作成する

独自のモジュールを作成して、アプリケーションに簡単に含めることができます。

次の例では、日付と時刻のオブジェクトを返すモジュールを作成します。

date.js
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()を使用します。

url.js
var url = require('url');

url.parse()

url.parse() メソッドを使用してアドレスを解析すると、アドレスの各部分をプロパティとして持つURLオブジェクトが返されます。

url.js
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
//summer.html
<!DOCTYPE html>
<html>
<body>
<h1>Summer</h1>
<p>I love the sun!</p>
</body>
</html>
winter.html
// winter.html
<!DOCTYPE html>
<html>
<body>
<h1>Winter</h1>
<p>I love the snow!</p>
</body>
</html>

要求されたファイルを開き、コンテンツをクライアントに返すNode.jsファイルを作成します。何か問題が発生した場合は、404エラーをスローします。

search.js
// 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');

Node.jsのEventEmitterについていろいろ

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);
  }
});

以上です!これで、サーバーがメールを送信できるようになりました。

:tada::tada::tada: Congratulations :tada::tada::tada:

MySQLと組み合わせて、更にNode.jsを学んで行きましょう。

こちらからどうぞ:
Node.jsアプリケーションとMySQLを接続しよう!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0