node.js + express + ect Install for MAC


# インストールバージョン（2015/06/21現在）
- Node.js v0.12.4
- express 4.12.4
- ect 0.5.9
- socket.io 1.3.5（このドキュメント内には関連記述してません）

```
// バージョン確認
$ node -v
$ express -V
$ npm info ect
$ npm info socket.io
```

---

# Node.js

Node.js
https://nodejs.org/

INSTALLからパッケージをダウンロードしてインストール完了。

# express

## expressインストール

```
$ sudo npm install -g express
```

|option|description|
|:--|:--|
|-g|Global install|

グローバルインストールをした場合はパスを通しておく？

```.bash_profile
NODE_PATH=/usr/local/lib/node_module
```

## expressコマンドを使えるようにする

```
$ sudo npm install -g express-generator
```

|option|description|
|:--|:--|
|-g|Global install|


参考
http://expressjs.com/ja/

## expressスケルトン作成

```
$ cd ~/Desktop
$ mkdir node_demo
$ cd node_demo
$ express myapp

   create : myapp
   create : myapp/package.json
   create : myapp/app.js
   create : myapp/public
   create : myapp/public/images
   create : myapp/public/stylesheets
   create : myapp/public/stylesheets/style.css
   create : myapp/routes
   create : myapp/routes/index.js
   create : myapp/routes/users.js
   create : myapp/views
   create : myapp/views/index.jade
   create : myapp/views/layout.jade
   create : myapp/views/error.jade
   create : myapp/bin
   create : myapp/bin/www

   install dependencies:
     $ cd . && npm install

   run the app:
     $ DEBUG=myapp:* npm start

   create : ./public/javascripts
```

なお、ディレクトリ名省略時は現在のディレクトリに作成される。

```
// 依存パッケージがnode_modulesにインストールされる
$ cd . && npm install
```

---

> 環境変数DEBUGにmyapp:*を設定しているのは、debugパッケージに対して表示するメッセージの設定をしているもよう。この場合、ワイルドカード指定によってmyapp以下の全てのデバッグメッセージが出力される。
>
> 詳細は以下を参照。
>
> debug
> https://www.npmjs.com/package/debug

_引用_
_[ExpressをGetting startedしてみる - light log](http://yamacent.hatenablog.com/entry/2015/04/01/185529)_

---

```.bash_profile
// 起動ポート変更
export PORT=3001
```

# ectインストール

```
$ npm install ect
```

expressスケルトン作成では（オプション指定をせずデフォルトの場合）jadeテンプレートエンジンなのでectへ変更する。なお、ectオプションには対応していない。

- app.js
- package.json
- views/
	- error.ejs
	- index.ejs
	- layout.ejs

## app.js

ectをrequireして設定を追加する。

```app.js
var ECT = require('ect');

app.engine('ect', ECT({watch:true,root:__dirname+'/views',ext:'.ect'}).render);
app.set('view engine','ect');
```

## package.json

テンプレートエンジンを変更する。

```package.json
{
	"ect": "*"
}
```

## index.ejs, layout.ejs, error.ejs

- 拡張子を.ectへ変更する
- パラメータ変数を修正する

jade形式で構造記述されてるので基本的に修正が必要。

```layout.ect
<html>
<body>
<% content ?> <!--// placeholder -->
</body>
</html>
```

```index.ect
title= <%= @title %>
```

_参考：[web帳 | node.js テンプレートエンジン ECTが爆速!! らしい件（ectの使い方）](http://www.webcyou.com/?p=5173)_

# その他、モジュール
 
- HTTPリクエストを扱えるモジュール [superagent](https://github.com/visionmedia/superagent)
- サーバサイドjQueryが扱えるモジュール [cheerio](https://github.com/cheeriojs/cheerio)
- HTTPクライアントモジュール [cheerio-httpcli](https://www.npmjs.com/package/cheerio-httpcli)
- プロセス管理 [PM2](https://github.com/Unitech/pm2)

スクリプトのプロセス管理「PM2」は入れておくと開発が便利そう。

```
// インストール
$ npm install pm2 -g

// スクリプト起動
$ pm2 start ./bin/www --watch
// プロセス詳細表示
$ pm2 show [id]
// プロセス一覧
$ pm2 ls
// ログ表示
$ pm2 logs
// プロセス停止
$ pm2 stop [id]
// プロセス削除
$ pm2 kill
```

**<font color="red">express4から./bin/wwwでスクリプトを起動すると--watchが効かないようです。（--watch: jsファイル更新監視でスクリプトを再起動する）</font>**

スクリプトファイルの移動、パスの修正が必要です。

```./bin/www
// プロジェクトルートディレクトリにスクリプトファイルを移動する
$ mv ./bin/www .
```

```package.json
// パス修正
"script": {
-	"start": "node ./bin/www"
+	"start": "node ./www"
}
```

```./www
// パス修正
- var app = require('../app');
+ var app = require('./app');
```

./bin/www で起動していたところを ./www として起動する。

```
// start
$ pm2 start ./www --watch
```

これで、 .js ファイルを更新したら監視再起動されるようになります。