Web で新規に作る画面のイメージが欲しいということで HTML でモックアップページを作ってるのですが、(ファイルを直接読み込むのはいろいろアレなので)簡単な HTTP サーバが欲しい。でも本番サーバを使うわけにはいかないので、なんか手頃なのないかなぁ、と思ったら node.js 使えばいいんじゃん、と気が付いた。
node.js で(HTML ファイルを表示するだけの)簡単な HTTP サーバを立てるのには connect パッケージを使えばいいのだが、その辺に転がってる情報はちょっと古いみたいでうまく動かなかったので、今後のためにメモしておく。
- node.js - nodejs connect cannot find static - Stack Overflow
- Node.js - Connectを使った静的ファイル配信サーバが動かなくなった - Qiita
準備
node.js は 0.12 の stable が登場している。おめでとう!
そうそう。会社内とかだと firewall に阻まれてたりするので、 npm のプロキシ設定を忘れずに。
ちなみに registry
の設定は http に変更しなくて大丈夫。
で、作業フォルダに必要なパッケージをインストールする。(言い忘れてたけど、今回は Windows 環境です。まぁどれでも関係ないけど)
C:\prototype\html>npm install connect
connect@3.3.4 node_modules\connect
├── utils-merge@1.0.0
├── parseurl@1.3.0
├── debug@2.1.1 (ms@0.6.2)
└── finalhandler@0.3.3 (escape-html@1.0.1, on-finished@2.2.0)
C:\prototype\html>npm install serve-static
serve-static@1.8.1 node_modules\serve-static
├── escape-html@1.0.1
├── utils-merge@1.0.0
├── parseurl@1.3.0
└── send@0.11.1 (destroy@1.0.3, fresh@0.2.4, ms@0.7.0, range-parser@1.0.2, depd@1.0.0, mime@1.2.11, debug@2.1.1, on-finished@2.2.0, etag@1.5.1)
アプリケーションの準備
パッケージをインストールしたフォルダにアプリケーション(今回は app.js
で。名前はご自由に)を用意する。アプリケーションの記述はこんな感じ。
var connect = require('connect');
var serveStatic = require('serve-static');
var port = 3000;
connect().use(serveStatic(__dirname)).listen(port);
console.log('Server has started at http://localhost:' + port);
同じフォルダに、動作確認用の HTML ファイルも用意しておく。
<!DOCTYPE html>
<html lang='ja'>
<head>
<meta charset='utf-8'>
<title>Hello World!</title>
</head>
<body>
<p>Hello World!</p>
</body>
</html>
余談だが、connect
および serve-static
では内部で Content-Type
の値を text/html; charset=utf-8
でハードコーディングしている。 node.js 標準の文字エンコーディングが UTF-8 なのでこれでいいのかもしれないが、他の文字エンコーディングの HTML ファイルでは確実に文字化けするので注意すること。きっとパッケージの中を弄れば他の文字エンコーディングにも対応できるだろうけど、ここでは踏み込まない。スマートじゃないし、どうしても他の文字エンコーディングじゃないとダメな場合は、ちゃんとしたサーバを用意したほうがいい。
アプリケーションの起動
C:\prototype\html>node app.js
Server has started at http://localhost:3000
これで簡単 HTTP サーバが起動した。これでブラウザで http://localhost:3000
にアクセスすれば “Hello World!” と表示される。おめでとう。
さて仕事に戻らないと。