node-http-proxyとnode-configでハマったお話

node-http-proxyとnode-configを使っていたらおかしなことに……

$ npm install http-proxy config
index.js
var config = require('config'),
    httpProxy = require('http-proxy'),
    proxyServer;

proxyServer = httpProxy.createServer(config);
proxyServer.listen(3000);
config/development.json
{
  "hostnameOnly": false,
  "router": {
    "localhost/aaa": "localhost:3001"
  }
}

こんな感じで書いてあげると……

$ node index.js

/home/sasaplus1/Work/node_modules/config/lib/config.js:918
    var value1 = object1[parm];
                        ^
TypeError: Cannot read property 'port' of undefined
    at Config._diffDeep (/home/sasaplus1/Work/node_modules/config/lib/config.js:918:25)
    at Config._diffDeep (/home/sasaplus1/Work/node_modules/config/lib/config.js:922:24)
    at Config._persistConfigsOnChange (/home/sasaplus1/Work/node_modules/config/lib/config.js:511:24)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

なんかnode-configがエラーを……


どうもnode-http-proxyのcreateServerにnode-configで読み込んだものをそのまま渡すのが良くないみたいです。
createServerが受け取った引数に対して何か値を追加している?のをnode-configの監視機能みたいなのが拾って、おかしなことになっている……っぽい感じなのですが面倒なのでよく調べてなかったり。


とりあえずnode-configで読み込んだ設定をディープコピーして、それを渡せば良いのかな。
underscore.jsでcloneすれば良いのかなあ…… もしくはお手軽にJSON文字列にして再度パースするとか?
って調べてみたらunderscore.jsのcloneってディープコピーじゃないっぽいなあ。ディープコピー面倒だなあ……