one's way blog

ワクワクを生み出せるWebエンジニアを目指して。

【55:Node.js & MongoDB入門】Node.jsで掲示板アプリ+Node.jsからMongoDBへアクセス

f:id:seintoseiya:20160415024608j:plain
プロジェクトNo.55:Node.js & MongoDB入門

ソーシャルゲームやチャットアプリなんかでよく使われているというNode.js。
これは勉強しておかなくては!ということで、いつも通りドットインストールさんのレッスンを一先ず修了。
要点とうまくいかなかった点をメモ書き程度に残しておきます。

ローカル開発環境の準備

こちらもドットインストールさんのレッスンを参考に下記ソフトウェアをダウンロード&インストール。

(下記のソフトウェアはNode.jsに直接関係なし)

【旧版】ローカル開発環境の構築 [MacOS X版] (全9回) - プログラミングならドットインストール

Node.js

今回使用したのはv5.10.1。
大量のアクセスに対応する仕組みと、リアルタイムな通信が注目されている。

nodebrewのインストール

まずはNode.jsをインストールする前に、バージョン管理ツールを入れます。
nodebrewはNode.js専用のバージョン管理ツール。

$ curl -L git.io/nodebrew | perl - setup
PATHの追加
$ sudo vi /etc/bashrc
export PATH=$HOME/.nodebrew/current/bin:$PATH
設定の読み込み
$ source ~/.basic
確認
$ nodebrew --version

Node.js

インストール(安定版)
$ nodebrew install-binary stable
node.jsのバージョンを指定(v5.10.1の場合)
$ nodebrew use v5.10.1 
確認
$ node -v

npm

バージョンは3.8.3。
Node.jsをインストールすると同梱している、パッケージマネージャー。

package.jsonの作成

projectのpackageを管理するためのファイルのpackage.jsonを作成します。
node.jsのlibraryを公開する際に必要なので作成しておきましょう。

$ npm init -y

EJS

HTMLを生成するテンプレートエンジン。
ざっくり言うとPHPみたいな事をJavaScriptでできる。

インストール

$ npm install ejs

projectのpackageを管理するためのファイルのpackage.jsonを作成します。
npm initコマンドにより対話形式でpackage.jsonファイルを作成出来ます。

MongoDB

リポジトリを追加(バージョン3.2の場合)

$ sudo vim /etc/yum.repos.d/mongodb.repo
[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc

インストール(安定版)

$ sudo yum install -y mongodb-org

起動

$ sudo /etc/init.d/mongod start

停止

$ sudo /etc/init.d/mongod stop
mongoと入力して以下のようなエラーになる場合
MongoDB shell version: 3.2.5
connecting to: test
2016-04-14T14:17:47.935+0000 W NETWORK  [thread1] Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2016-04-14T14:17:47.935+0000 E QUERY    [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:229:14
@(connect):1:6

exception: connect failed

データベースのパスが間違っているため、パスの設定をする

$ sudo mkdir /var/db/mongo
$ sudo mongod --dbpath /var/db/mongo
Node.jsからMongoDB接続時にMongoError connect ECONNREFUSEDとなる場合の対処法

http://www.kashiyuki.com/entry/2016/02/07/201939

Node.jsでハマったところ

ドットインストールの#11〜13で作る「一行掲示板」だが、バージョンが違うせいか動作しなかった。(formからの受信したデータの末尾にnullという文字列が追加される。キャストされるはずなんだが。。。)
動画ではEvent: 'readable'を使っていますが、Event: 'data'で書き直して動作しました。

// イベント設定
server.on('request', function(req, res){
	if(req.method === 'POST'){
	// postした場合
		var body = "";
		req.on("data", function(data){
		// formからのデータ受信している間
			body += data;
		});
		req.on("end", function(){
		// 全ての受信が終わった時
			// 受信データをqueryに変換
			var query = qs.parse(body);
			// nameの値をpostsに格納
			posts.push(query.name);
			renderForm(posts, res);
		});
	}else{
	// postされていない場合
		renderForm(posts, res);
	}
});