Node-REDの設定

Node-REDは`settings.js`で各種設定を行います。自分の環境で現在どのsettings.jsを見ているか確認するにはNode-RED起動時の以下のログを見ます。

```
Welcome to Node-RED
===================

3 Dec 01:54:33 - [info] Node-RED version: v0.12.1
3 Dec 01:54:33 - [info] Node.js  version: v0.12.7
3 Dec 01:54:33 - [info] Loading palette nodes
3 Dec 01:54:34 - [info] Settings file  : [これが設定ファイルの場所] 
3 Dec 01:54:34 - [info] User directory : [これがユーザディレクトリ] 
3 Dec 01:54:34 - [info] Flows file : [これがflow設定ファイルの場所] 
3 Dec 01:54:34 - [info] Server now running at http://127.0.0.1:1880/
3 Dec 01:54:34 - [info] Starting flows
3 Dec 01:54:34 - [info] Started flows
3 Dec 01:54:43 - [info] Stopping flows
```

ちなみに起動時に`--settings|-s`オプションで任意のpathも指定できます。

## Node-RED実行時の設定

### flowFile

flow設定をファイルに保存する場合のファイル名です。デフォルトは`flows_<hostname>.json`です。

### userDir

flow設定をファイルに保存する場合のファイルへのpathです。デフォルトは`$HOME/.node-red`です。

### nodesDir

自作のnodeなどを追加するディレクトリを指定できます。ここで指定したディレクトリ内にnodeの`.js`と`.html`ファイルを配置するとNode-REDのパレットに表示されるようになります。

### uiHost

ホストです。デフォルトは`0.0.0.0`です。

### uiPort

ポートです。デフォルトは`1880`です。

### httpAdminRoot

flow Editorのpathを指定できます。デフォルトは`/`です。ちなみに`false`を指定するとEditorが無効になります。

### httpAdminAuth

flow EditorにBasic認証を設けます。以下が設定例。

```
httpAdminAuth: {user:"admin", pass:"5f4dcc3b5aa765d61d8327deb882cf99"}
```

`pass`はMD5ハッシュを指定します。上記の例では実際にBasic認証ダイアログへ入力するパスワードは`password`という文字列になるということです。コンソールなどで以下のnodeコマンドを実行することでハッシュ値を得られます。

```
node -e "console.log(require('crypto').createHash('md5').update('ここに実際のパスワード文字列を指定','utf8').digest('hex'))"
```

### httpNodeRoot

HTTP In nodeのHTTPエンドポイントのpathを指定できます。デフォルトは`/`です。ちなみに`false`を指定すると全てのHTTPエンドポイントが無効になります。

### httpNodeAuth

HTTP In nodeのHTTPエンドポイントにBasic認証を設けます。設定方法は`httpAdminAuth`と同様です。

### httpRoot

httpRootを指定すると`httpAdminRoot`と`httpNodeRoot`を同じpathで上書きします。

### https

HTTPSを有効にします。以下が設定例。詳細は[こちら](https://nodejs.org/api/https.html#https_https_createserver_options_requestlistener)。

```
https: {
  key: fs.readFileSync('privatekey.pem'),
  cert: fs.readFileSync('certificate.pem')
},
```

### disableEditor

`true`を指定するとflow Editorが無効になります。デフォルトは`false`です。`httpAdminRoot`を`false`にした場合はUIもAPIも無効になりますが、こちらはUIのみ無効になります。

### httpStatic

ここで指定したpathを静的なWebコンテンツとして表示できます。例えば`/home/username/.node-red/`と指定した場合、`/home/username/.node-red/index.html`を作成すると`/`へアクセスすると作成した`index.html`が表示されます。したがって`httpStatic`を指定する場合は`httpAdminRoot`は`/`より下層のpathにする必要があります。

### httpStaticAuth

`httpStatic`にBasic認証を設けます。設定方法は`httpAdminAuth`と同様です。

### httpNodeCors

HTTP In nodeのHTTPエンドポイントのCross-Origin Resource Sharing (CORS) を有効にします。以下が設定例。詳細は[こちら](https://github.com/expressjs/cors#configuration-options)。

```
httpNodeCors: {
  origin: "*",
  methods: "GET,PUT,POST,DELETE"
},
```

### httpNodeMiddleware

HTTP In nodeのHTTPエンドポイントにHTTPミドルウェアを追加できます。HTTPエンドポイントでセッションとクッキーのハンドラを利用したい場合は以下のように設定します。

```
httpNodeMiddleware: function(req,res,next) {
  session({
    store: new MongoStore({
      url: process.env.MONGOLAB_URI
    })
  })(req, res, function() {
    cookieParser()(req, res, next);
  });
},
```

## flow Editorの設定

### adminAuth

flow Editorにログインフォームを設けます。以下が設定例。

```
adminAuth: {
  type: "credentials",
  users: [{
    username: "admin",
    password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
    permissions: "*"
  }]
}
```

* `users`リストで複数のユーザを設定できます
* パスワードはbcryptアルゴリズムによるハッシュ値を指定します
* `permissions`でユーザ毎に`*`フルアクセスか`read`read only権限が付与できます

コンソールなどで以下のnodeコマンドを実行することでハッシュ値を得られます。

```
node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" ここに実際のパスワード文字列を指定
```

### paletteCategories

flow Editorのパレットのカテゴリの順序を設定します。カテゴリがリストにない場合はパレットの最後に追加されます。デフォルトの順序は以下。

```
['subflows', 'input', 'output', 'function', 'social', 'storage', 'analysis', 'advanced'],
```

## nodeの設定

### functionGlobalContext

function nodeの中では他のライブラリを`require`できませんが`functionGlobalContext`であらかじめ`require`しておくことで`context.global`からライブラリにアクセスできるようになります。以下が設定例。

```
functionGlobalContext: {
  jsforce: require('jsforce')
},
```

上記のように設定してfunction nodeで以下のようにしてdebug nodeに吐くとjsforceオブジェクトが格納されていることがわかります。ただしライブラリがnpmでグローバルにインストールされているか`settings.js`より下層にインストールされていなければいけません。

```
msg.payload = context.global.jsforce;
return msg;
```

### debugMaxLength

debug nodeでdebugに表示する文字数を指定します。デフォルトは1000文字です。debugに表示する文字が`...`で途切れてしまう場合はここを増やします。

### mqttReconnectTime

mqtt nodeの接続が切断された場合の再接続までの待機時間。デフォルトは5秒。

### serialReconnectTime

serial nodeの接続が切断された場合の再接続までの待機時間。デフォルトは5秒。

### socketReconnectTime

tcp nodeの接続が切断された場合の再接続までの待機時間。デフォルトは10秒。

### socketTimeout

tcp nodeのタイムアウト時間。デフォルトは120秒。