数学やプログラミングや映画など

新米SEがwebと数学と映画についてつらつら書きたいブログです。

初心者がNode.jsの概要について解説する話

Node.jsとは?

  • 公式サイト https://nodejs.org/en/
  • バックエンド(サーバー側で動作する)Javascript
  • Javascript大量のHTTPリクエストを処理できるようにしたプラットフォームともいえる
  • ノンブロッキング(非同期)な処理を行えるのが特徴
  • javascriptの基本的な動作について知っておかないと初学者にはしんどい
    • 同期・非同期処理について
    • コールバック関数とか
    • イベントとか
  • httpについての知識も少しあったほうがいいかも
    • telnetでhttpリクエストを投げられるぐらいだったらOK!

Node.jsのインストール

  • CentOS6にnode.jsをインストールすることを考えます
  • yumでepelリポジトリからインストール可能です
[@guestos ~]$ sudo yum epel-release

~略~

[@guestos ~]$ sudo yum install nodejs

~略~

[nknsh@guestos ~]$ node -v
v0.10.42

Node.jsでHello!world!をする

  • nodeでnode.jsを起動し、対話的に行う
[@guestos nodejs]$ node
> console.log('hello!node!');
hello!node!
undefined
> .exit
  • .jsファイルを実行することも可能
[@guestos nodejs]$ cat hellonode.js
console.log('hello!node!');
[@guestos nodejs]$ node hellonode.js
hello!node!

HTTPリクエストを処理する

  • 以下のようにjsファイルを作成し、実行する
[@guestos nodejs]$ vim index.js
[@guestos nodejs]$ cat index.js
var http = require('http');
var server = http.createServer();

server.on('request', function(req, res){
        res.writeHead(200, {'Contetnt-Type': 'text/plain'});
        res.write('hello!node!');
        res.end();
});

server.listen(3000, '192.168.100.200');
console.log('server listening, port 3000');
[@guestos nodejs]$ node index.js
server listening, port 3000
  • httpモジュールにリクエスト処理などのHTTP周りの処理が書いてある
  • .createServer()メソッド でサーバーの役割を担うオブジェクトが生成できる
  • .on('イベント', コールバック関数) でオブジェクトに対してイベントを付与できる
    • 今回はサーバーhttpリクエストが来た場合のイベントを作成する
  • res.writeHead('ステータスコード', HTTPレスポンスヘッダ) でリクエストに対するレスポンスヘッダの記述が可能
  • res.write('コンテンツ') でリクエストに対しどのようなコンテンツを返すかの記述が可能
  • レスポンスの最後は res.end() で終わりましょう
  • server.listen(ポート番号, 'IPアドレス') でhttpリクエストを処理するサーバー起動
  • 結果
    • 192.168.100.100(同一セグメント)のwindowsマシンでchromeを使ってアクセス

f:id:nknshmsk:20160725214225p:plain

エラーが出てサーバーが起動しなかった場合

  • 以下のエラーが出た場合の対処
events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: listen EADDRNOTAVAIL
    at errnoException (net.js:905:11)
    at Server._listen2 (net.js:1024:19)
    at listen (net.js:1065:10)
    at net.js:1147:9
    at dns.js:72:18
    at process._tickCallback (node.js:448:13)
    at Function.Module.runMain (module.js:499:11)
    at startup (node.js:119:16)
    at node.js:935:3
  • すでにnode.jsは起動していないか?
    • ps aux | grep node で確認
    • 起動していた場合 sudo kill -9 プロセス番号 で強制終了
  • 他のプロセスとポート番号はかぶっていないか
    • netstat -an でポート番号の確認
    • かぶっていた場合 server.listen(ポート番号, 'IPアドレス') のポート番号を変更
  • 正しいIPアドレスを設定してあるか

まとめ

  • node.jsのHello world!までについてを記しました
  • javascriptについて知識がある人なら理解は容易かもしれません
  • おすすめの参考書
    • 筆者はこの本を使って勉強しています
    • 割と丁寧だと思うのでお勧めです