2011-12-06
独自イベントを発火するオブジェクトを作る
既存のモジュールから手軽にイベントを設定する方法のメモ。
まだまだ知らないこと多いなぁ・・。
組み込みモジュールを読み込む
var events = require('events'),
util = require('util');
EventEmitterをprototype継承する
function MyEventSouce() {}
//utilクラスを使って継承
util.inherits(MyEventSouce, events.EventEmitter);
var myEvent = new MyEventSouce();
//独自イベントを監視
myEvent.on('myEvent', function (data) {
console.log('Fire!: ', data);
});
setTimeout(function () {
//独自イベントを発火
myEvent.emit('myEvent', 'hoge');
}, 1000);
2011-11-10
Node.jsのエラーでサーバが停止しないようにする
ないはずないと思いながらも、なかなか見つからなかったエラー処理のお話。
以下のようにエラー(uncaughtException)をListenしておけばいいみたい。
uncaughtException を監視する
http://nodejs.jp/nodejs.org_ja/api/process.html#event_uncaughtException_
説明を引用すると、
発生した例外がイベントループまでたどり着いた場合に生成されます。 もしこの例外に対するリスナーが加えられていれば、 デフォルトの動作 (それはスタックトレースをプリントして終了します) は起こりません。
なにもしていないとエラー内容をコンソールに出力してサーバが停止しますが、
このuncaughtExceptionをListenしておけばそこでエラーを拾える、ということのよう。
try .. catchで適切に処理するのが望ましいけど、思わぬエラーでサーバが停止しないように入れておくといいみたい。
ちなみにここに飛んだ場合はなにもしないと接続中のままになってページが表示されないけど、
サーバ自体が落ちるわけではないから他の人がアクセスした場合は正常にページが表示される。
Syntax
process.on('uncaughtException', function (err) {
console.log('Caught exception: ' + err);
});
2011-11-01
Node.jsで動いているサービスにドメインを割り当てる
方法については以下の記事を参考にしました。
Apacheでリバースプロキシする
バーチャルホストの設定を以下のようにして設定することで、apacheからプロキシする?という感じのようです。
※設定ファイルは使用しているサーバによって多少異なると思いますが、大体、「/etc/httpd.conf」と「/etc/extra/httpd-vhosts.conf」あたりになると思います。
NameVirtualHost *:80
<VirtualHost *:80>
ServerName example.com
ProxyPass / http://localhost:8124/
ProxyPassReverse / http://localhost:8124/
</VirtualHost>
これで http://example.com/ にアクセスがあると、8124番ポートで動いているNodeのサービスが表示されるようになります。
実際の設定についてはサブドメインでの運用になるかと思います。
サブドメインの設定については使用しているドメイン管理サービスなどで設定後、自身のサーバに上記で設定したサブドメインにアクセスがあった場合に、表示させたいport番号で動いているNodeのサービスが表示されるよう設定してやります。
これで無事、Nodeをサブドメインで運用できるようになりました。
2011-10-18
Node.jsでcookieを保存する
色々探してやっと見つけた。
というか、writeHeadに配列渡せたのか・・。
ということでメモ。
res.writeHead(200, [
['Set-Cookie', 'mycookie1=value1'],
['Set-Cookie', 'mycookie2=value2'],
['Content-Type', 'text/html']
]);
こちらの記事を参考にしました↓
http://caolanmcmahon.com/posts/multiple_set_cookie_headers_in_node_js
expressを使う場合
ちなみにexpressを使ってる場合は以下みたいに書けるよう。
Syntax
res.cookie(name, val[, options])
example
res.cookie('rememberme', 'yes', { expires: new Date(Date.now() + 900000), httpOnly: true });
2011-10-17
開発環境と本番環境でcallbackなどのURLを変える
Node.jsで開発をしていて、ローカルにNode.js環境を作成していると開発中は「localhost」などでアクセスして確認したりすると思います。
それをそのままサーバにアップして実行しようとするとURLの部分でlocalhostが残ったままになってしまったりします。
しかし毎回そこを書き換えるのもめんどくさいので、自分は以下のようにして処理を分けています。
var domain = (process.argv[2] === 'prod') ? 'exsample.com' : 'localhost';
そして本番で実行するときは
$ node app.js prod
のように実行します。
コマンドラインの第一引数が「process.argv[2]」に入り、それ以降の引数はargv[3], argv[4]...のようになっていくみたいです。
////////////////////////////////////////////////////
[追記]
光の速さでコメントもらったので追記しておきますw
標準的なやり方としては以下のようにやるようです。
$ NODE_ENV=production node app.js
一行で書きます。
で、app.js内では
var domain = (process.env.NODE_ENV === 'production') ? 'exsample.com' : 'localhost';
などのようにしてアクセスできるみたいです。
(ちなみに普通に $ node app.js で実行した場合は、NODE_ENVは undefined になる)
