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ってディープコピーじゃないっぽいなあ。ディープコピー面倒だなあ……