開発環境を設定してみる
前回の,node.jsとnpmのインストールをしたメモ(CentOS さくらのVPS)でnode.jsとnpmをインストールしましたが,まだ環境設定ができてなかったので今回も引き続き下準備.
(仮に) /hogehoge/public/dev/ で開発することに.環境のディレクトリ構成とか,サーバー設定についてあまり参考になる記事を見つけられなかったので,以下適当に設定をしてみた.サーバーは,nginxを使います.
ディレクトリ構成の予定
- /hogehoge/public/dev/server.js
- 8124をlistenするHTTPサーバー的なJSファイル..
- /hogehoge/public/dev/app/
- その他lib的に,nodeで実行するJSを設置する.
- /hogehoge/public/dev/www/
- 公開ディレクトリとして,CSSやクライアント用のJSを設置する.
/etc/nignx/conf.d/virtual.conf を設定
http://example.com/ 的なリクエストのときに,index.htmlを優先して欲しい設定.
$request_filenameで判定すると,当然のようにindexディレクティブは考慮されないようで,http://example.com/へのリクエスト時に,http://example.com/index.htmlが存在しても無視される.
そこで下記のように2段構えの判定にして,index.htmlがあればrewriteすることに.この場合,indexディレクティブに意味がないと思う.どうやるのが一般的なんでしょ?
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_max_temp_file_size 0; server { listen 80; server_name example.com; index index.html; root /hogehoge/public/dev/www; location / { # 実存パスへのリクエストならbreak if ( -f $request_filename ) { break; } # index.htmlがあればrewrite if ( -f $request_filename/index.html ) { rewrite (.*) $1/index.html break; } # 非実存パスへのリクエストならnode.jsにpass if ( !-f $request_filename ) { proxy_pass http://127.0.0.1:8124; break; } } }
追記: staticファイルの取り扱いって,express使うなら,express.staticProvider(__dirname+'www')みたいな感じで任せておけば,それで良かったんですね.問答無用で,8124にpassしてしまっても問題なさそう.このエントリを書き終えて,さらに試して遊んでる最中に気づきました.
テストファイルを実行してみる
node.jsのトップにあるサンプルスクリプトを,少しだけ改変してリクエストされたパスも返すようにしてみた. さらにconsole.logで同様に,リクエストのあったパスをサーバー側でも出力するようにしてみる.
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n\n'+req.url); console.log('request for '+req.url); }).listen(8124, "127.0.0.1"); console.log('Server running at http://127.0.0.1:8124/');
node-devで起動
node-dev(後述)という,ファイルの更新を検知して勝手に再起動してくれるモジュールを使って,上のサンプルを起動します.
% node-dev server.js 22 Feb 01:00:09 - [INFO] Started Server running at http://127.0.0.1:8124/
serverが起動したようです.
http://example.com/hoge でブラウザからリクエスト
Hello World /hogehoge
ブラウザでHello Worldとパスが確認できました.
request for /favicon.ico request for /hogehoge
起動しているサーバーのほうでも,ログが出力されています.Firefoxがfaviconも勝手に探しにいってるみたいですね.
これで何とかnode.jsを動かすところまではきたので,次回以降で実際にサーバーサイドJSを書いていってみたいと思います.
おまけ: 開発ツール的なモジュールを追加でインストール
node.jsの開発時に役立つモジュール : アシアルブログ
こちらを参考に,node-devとnode-inspectorをインストール.npm使ってるだけなので,特に目新しいことはないけど一応ログ.
% envsudo npm install node-dev npm info it worked if it ends with ok npm info using npm@0.3.3 npm info using node@v0.5.0-pre npm info fetch http://registry.npmjs.org/node-dev/-/node-dev-0.0.5.tgz npm info calculating sha1 /usr/local/lib/node/.npm/.cache/node-dev/0.0.5/package.tgz npm info shasum d83897b6389f8ce55fc774e98353466b2f0aaa1e npm info preinstall node-dev@0.0.5 npm info install node-dev@0.0.5 npm info postinstall node-dev@0.0.5 npm info preactivate node-dev@0.0.5 npm info activate node-dev@0.0.5 npm info postactivate node-dev@0.0.5 npm info build Success: node-dev@0.0.5 npm ok % envsudo npm install node-inspector npm info it worked if it ends with ok npm info using npm@0.3.3 npm info using node@v0.5.0-pre npm info fetch http://registry.npmjs.org/node-inspector/-/node-inspector-0.1.6.tgz npm info calculating sha1 /tmp/npm-1298299553438/1298299553438-0.5866224074270576/tmp.tgz npm info shasum 61efaad99355c40ae89f7c46304882b822c3b4a8 npm info calculating sha1 /usr/local/lib/node/.npm/.cache/node-inspector/0.1.6/package.tgz npm info shasum 13d013df81b4f24b6aebf056a45494f391dc782b npm info preinstall node-inspector@0.1.6 npm info install node-inspector@0.1.6 npm info postinstall node-inspector@0.1.6 npm info preactivate node-inspector@0.1.6 npm info activate node-inspector@0.1.6 npm info postactivate node-inspector@0.1.6 npm info build Success: node-inspector@0.1.6 npm ok