Express version 4 以降は express-generator というモジュールをインストールすることで、 Web アプリケーションのテンプレートを生成することができる。

今回の環境: Mac OS X Yosemite 10.10.2


$ uname -mrsv
Darwin 14.1.0 Darwin Kernel Version 14.1.0: Thu Feb 26 19:26:47 PST 2015; root:xnu-2782.10.73~1/RELEASE_X86_64 x86_64

Node.js はインストール済みの環境。

npm で express-generator モジュールをインストール。


$ npm install express-generator
express-generator@4.12.1 node_modules/express-generator
├── sorted-object@1.0.0
├── commander@2.6.0
└── mkdirp@0.5.0 (minimist@0.0.8)

express コマンドで、 ./app ディレクトリに Web アプリの雛形を生成。


$ ./node_modules/.bin/express ./app

   create : ./app
   create : ./app/package.json
   create : ./app/app.js
   create : ./app/public
   create : ./app/public/images
   create : ./app/public/javascripts
   create : ./app/public/stylesheets
   create : ./app/public/stylesheets/style.css
   create : ./app/routes
   create : ./app/routes/index.js
   create : ./app/routes/users.js
   create : ./app/views
   create : ./app/views/index.jade
   create : ./app/views/layout.jade
   create : ./app/views/error.jade
   create : ./app/bin
   create : ./app/bin/www

   install dependencies:
     $ cd ./app && npm install

   run the app:
     $ DEBUG=app:* ./bin/www

$ cd app/

生成された package.json には、必要なモジュール等が記載されている。


$ cat ./package.json 
{
  "name": "app",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.12.0",
    "cookie-parser": "~1.3.4",
    "debug": "~2.1.1",
    "express": "~4.12.2",
    "jade": "~1.9.2",
    "morgan": "~1.5.1",
    "serve-favicon": "~2.2.0"
  }
}

npm install で、必要なモジュールをインストールする。 package.json を参照して、必要なモジュールを自動的にインストールしてくれる。


$ npm install
debug@2.1.3 node_modules/debug
└── ms@0.7.0

cookie-parser@1.3.4 node_modules/cookie-parser
├── cookie-signature@1.0.6
└── cookie@0.1.2

morgan@1.5.2 node_modules/morgan
├── basic-auth@1.0.0
(以下略)

npm start で Web アプリを起動する。


$ npm start
 
> app@0.0.0 start /Users/hogeuser/node/app
> node ./bin/www

雛形の Web アプリにアクセスできるか確認する。別のターミナルを立ち上げて、 http://localhost:3000/ にアクセスすると、「Welcome to Express」と表示される。


$ curl http://localhost:3000/
<!DOCTYPE html><html><head><title>Express</title><link rel="stylesheet" href="/stylesheets/style.css"></head><body><h1>Express</h1><p>Welcome to Express</p></body></html>

./bin/www ファイルを見ると、ポート番号3000でリクエストを受け付けてるのがわかる。


$ head -16 ./bin/www
#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('app:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

./bin/www は app.js を require している。メインの処理となるのは app.js に記述されている。


$ head -15 ./app.js 
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

Web アプリの開発では、 app.js とそこから require したファイルに機能を実装していけば良さそう。

tags: node.js express

Posted by NI-Lab. (@nilab)