2013年12月29日日曜日

Node.js+ExpressなHelloWorld

Node.jsとNode.js用WebApplicationフレームワークExpressを使ったHelloWorldです。

インストール

まずは node.js と npm をインストールして、
$ sudo apt-get install nodejs npm
$ nodejs -v
v0.10.15
npm を使って Express をインストール。
$ sudo npm install -g express
$ express -v
2.5.8

プロジェクト作成

では、プロジェクトを作りましょう。プロジェクト名は hello-world としました。
$ mkdir hello-world
$ cd hello-world

次に package.json を作ります。
$ vi package.json

package.json
{
  "name": "hello-world",
  "description": "hello world test app",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "express": "3.x"
  }
}

ここで npm install を実行すると、package.jsonの記述に従って必要なモジュールがインストールされます。
$ npm install
$ npm ls
npm WARN package.json hello-world@0.0.1 No README.md file found!
hello-world@0.0.1 /home/at/hello-world
└─┬ express@3.4.7
  ├── buffer-crc32@0.2.1
  ├─┬ commander@1.3.2
  │ └── keypress@0.1.0
  ├─┬ connect@2.12.0
  │ ├── batch@0.5.0
  │ ├── bytes@0.2.1
  │ ├─┬ multiparty@2.2.0
  │ │ ├─┬ readable-stream@1.1.9
  │ │ │ ├── core-util-is@1.0.0
  │ │ │ └── debuglog@0.0.2
  │ │ └── stream-counter@0.2.0
  │ ├── negotiator@0.3.0
  │ ├── pause@0.0.1
  │ ├── qs@0.6.6
  │ ├── raw-body@1.1.2
  │ └── uid2@0.0.3
  ├── cookie@0.1.0
  ├── cookie-signature@1.0.1
  ├── debug@0.7.4
  ├── fresh@0.2.0
  ├── merge-descriptors@0.0.1
  ├── methods@0.1.0
  ├── mkdirp@0.3.5
  ├── range-parser@0.0.4
  └─┬ send@0.1.4
    └── mime@1.2.11

これで最もシンプルなアプリのひな形が完成しました。

アプリを実装

それではアプリ本体を作っていきましょう。今回はファイル名を app.js としました。app.js の他にも server.js と命名するのもわりと一般的なようです。

$ vi app.js

app.js
var express = require('express');
var app = express();

app.get('/hello.txt', function(req, res){
  var body = 'Hello World';
  res.setHeader('Content-Type', 'text/plain');
  res.setHeader('Content-Length', Buffer.byteLength(body));
  res.end(body);
});

app.listen(3000);
console.log('Listening on port 3000');

app.jsができたら早速アプリを起動してみましょう。
$ nodejs app
Listening on port 3000
http://localhost:3000/hello.txt へブラウザでアクセスすると画面に「Hello World」が表示されます。


エラーハンドリング

app.jsにエラーハンドリングを実装して少しだけ高度にしてみましょう。

$ vi app.js

app.js
var express = require('express');
var app = express();

app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
/* Error Handling */
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);

app.get('/hello.txt', function(req, res){
  var body = 'Hello World';
  res.setHeader('Content-Type', 'text/plain');
  res.setHeader('Content-Length', Buffer.byteLength(body));
  res.end(body);
});

function logErrors(err, req, res, next) {
  console.error(err.stack);
  next(err);
}

function clientErrorHandler(err, req, res, next) {
  if (req.xhr) {
    res.send(500, { error: 'Something blew up!' });
  } else {
    next(err);
  }
}

function errorHandler(err, req, res, next) {
  res.status(500);
  res.render('error', { error: err });
}

app.listen(3000);
console.log('Listening on port 3000');

こんなかんじです。

おまけ:空プロジェクトを自動生成

expressコマンドを使って、お気に入りのモジュールが最初から組み込まれた空プロジェクトを自動生成することもできます。
$ express --sessions --css stylus --ejs myapp
これで EJS + Stylus + sessionが組み込まれたアプリ「myapp」の空プロジェクトが完成しました。

$ cd myapp && npm install
上記コマンドで必要なモジュールをインストールしたら、

$ nodejs myapp
myappアプリを実行します。
expressコマンドの詳細は --help を参照してください。


以上がExpressの基本中の基本です。
次回はこれをさらに発展させて、KeyValue型データストア「Redis」を使ったアプリも作ってみましょう。


関連エントリ
Node.js+MongoDB+ExpressでWeb APIをシンプルに

参考サイト
Express - guide

0 件のコメント:

コメントを投稿