読者です 読者をやめる 読者になる 読者になる

キンサクプログラマー

お金儲けと技術のメモ

Express.jsでサービスをつくるよ〜

み〜んなぁ〜 Expressでサービス作るよ〜

最近のJavaScriptはなんでもできるということで Expressを使ったサービスつくる(りたい)。
参考資料
Express - Node.js web application framework 公式サイト

Expressとは!
Nodejsを使ったWebアプリケーションフレームワーク

  • 安定してる
  • 早い
  • テンプレートエンジンいろいろつかえる!
  • すぐ使える!

そんなやつらしい。

導入

まずは環境のインストールだよぇ〜

$ npm install express

これでExpressがお使いのPCにはいったよぉ〜

$ npm install -g express-generator@4

ジェネレータも入ったよぇ〜

[vagrant@localhost html]$ express myapp

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

   install dependencies:
     $ cd myapp && npm install

   run the app:
     $ DEBUG=myapp:* npm start

   create : myapp/public/javascripts

ケルトンができたよぇ〜

DEBUG=myapp npm start

http://localhost:3000でアクセス。みれるよぉ〜
f:id:pikurusux:20150729002521p:plain

ここまで公式チュートリアル
こんなファイルツリーになっている。

├── app.js
├── bin
│   └── www
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── users.js
└── views
    ├── error.jade
    ├── index.jade
    └── layout.jade

ざっくりとした動き(勝手な解釈)

Express自体はNode.jsをラッピングして使いやすくしてくれている存在らしい。内部ではNode.jsさんが動いてくれていて、

npm start

ってやると、package.jsonのなかを解釈してNodeをスタートさせるらしい(詳しくはよくわからん)。
あとは、所定の手順でExpressが実行されるだけ。
最初に、app.jsが処理されるみたいだね。
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');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

requireってのは#includeと同じイメージであっていそうだ。あとはexpress()でサーバインスタンスを作るってイメージか。
オブジェクト指向すらまともにやっていないのでよくわからないぞ。

眠くなってきたので続きは明日。
7/29 つづき

app.set

おもにここに書いてある
http://expressjs.com/4x/api.html#app.set
viewsはviewsのディレクトリがどこか、
views engineは指定してない場合のテンプレートエンジンを意味する。
ここまでは少ないから簡単

app.use([path],function)

ミドルウェアを定義する。ミドルウェア・・・?

ミドルウェア(英: Middleware)は、コンピュータの分野で、コンピュータの基本的な制御を行うオペレーティングシステム(OS)と、各業務処理を行うアプリケーションソフトウェアとの中間に入るソフトウェアのこと。

ん。ちょっと違うな。
とりあえず引数にreq,res,nextを持ったコールバックって感じかな。(この「ミドルウェア」って名前はふさわしいのか疑問)
第一引数のパスは省略するとルートになるとかならないとか。
そして上から順番に実行されていくみたい。

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

だからエラーのこの人は通常処理の後ろにかかんといけないということみたい。

ここまでただのチュートリアル解説