2011-11-17 12 views
1

現時点ではNode.JSを学習しています。Node.JS HTTPサーバーで作業する作業の流れ

すべてがうまくいきます。ちょうど私は仕事の流れに少し挑戦しています。

私は特定のポートで待機するHTTPサーバーを作成します。たとえば、

var http = require("http"); 

http.createServer(function(request, response) { 
    response.writeHead(200, {"Content-Type": "text/plain"}); 
    response.write("Hello World"); 
    response.end(); 
}).listen(8888); 

正常に動作します。唯一の問題は、私は上記のコードを持つファイルを編集し、ノードserver.jsを入力して、再度、ノード・プロセスを起動しようとすると、私は次のエラーを取得することです:

Error: EADDRINUSE, Address already in use. 

だから私は、私が殺すために必要学びました変更を反映する前にpsを使ってノードプロセスを再起動することができます。

しかし、これは痛みのようです。私は私が書いているサーバーに変更を加えるたびにノードプロセスを殺す必要がありますか?

私は確かに良い方法があります。どんな助け?

答えて

1

私は開発中に、ターミナルウィンドウのコマンドラインからノードを実行する傾向があります。私がテストを終えたら、Ctrl + Cを押すだけで現在のプロセスが中断され、ノードを殺してから矢印を押してプロセスを再開します。

+0

Ctrl-Cこれは...最初はCtrl-ZでNode Serverを停止していました。しかし、もっと良い方法があると思うべきです。ありがとう! @ beny23 – dade

+0

CTRL-Zはバックグラウンドで中断します。 fgコマンドで再開することができます。だから、CTRL-Zは実際にファイルディスクリプタを使用してメモリ内に保持しています...あなたのポートを新しいプロセスで開くことができなかった理由です。 – staackuser2

0

簡単な方法はありません。ノードの作者はホットリロードのアイデアが好きではないので、これが動作する方法です。

サーバをモジュールに入れた場合、メインスクリプトのrequire、変更のために.jsをfs.watchFile変更してファイルを変更して手動で停止し、手動でモジュールキャッシュから削除するとハックすることができます(私が間違っていなければrequire.cache)、もう一度requireです。

または、子プロセスで実行し、ファイルを変更した後にそれを強制終了して再作成します(つまり、手作業で行うことを自動的に行う)。

+0

彼らはホットコアリロードが好きです、ノーデモン、永遠に、監督などを参照してください – Raynos

0

nodemonvideo tutorial about it here)またはnode-supervisorのように、ファイルを編集するときにサーバーが自動的に再起動するようにすることができます。
これを手動で実行する場合は、プロセス(CTRL + C)を中断して最後のコマンド(node server.js)を再実行します。

+0

nodemonは0.6に落ちます:( – Raynos

1

私の解決策は、ノード-devのは、「ノード」と同じですが、自動的にアプリケーションディレクトリ(またはサブディレクトリ)内のファイルが変更されたapp.js毎回再実行

npm install dev -g 
node-dev app.js 

と同じくらい簡単です。静的ファイルが変更されたときに再起動することを意味しますが、開発モードでは受け入れられるはずです

+0

"npm install dev -g"がMacにインストールされませんでした。(致命的なエラー: 'sys/inotify.h 'file not found)。私はこのモジュールをインストールする "npm install node-dev -g"を使用しました:https://github.com/fgnass/node-dev - Mac上での魅力のように働いていました。 – DerWOK