18
17

More than 5 years have passed since last update.

Express 事始め

Posted at

express + mongoose

Express

Shinatra / Flask / Laravel みたいな軽量系 Web Framework

... Laravelはちょっと違うかもだけどまぁそんな感じ。

MySpaceが使ってるっぽい。 http://expressjs.com/applications.html

install

$ npm install -g express

Project の作成

$ express --css stylus myapp 
$ tree myapp
myapp
├── app.js
├── node_modules
...
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│       ├── style.css
│       └── style.styl
├── routes
│   ├── index.js
│   └── user.js
└── views
    ├── index.jade
    └── layout.jade

アプリケーション構成

app.js がメインファイルになり、ここにルーティングを書く。

app.js
/**
 * Module dependencies.
 */

// ライブラリの読み込み
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(require('stylus').middleware(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

// ルーティングの設定
app.get('/', routes.index);
app.get('/users', user.list);

// サーバの起動
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

app.get('/', routes.index);routesvar routes = require('./routes');で定義されており、routes/index.jsを指していることになる?。routes.indexroutes/index.jsexports.indexメソッド?関数?を呼び出す?

app.get('/users', user.list);userは、上記のvar user = require('./routes/user');で定義されており、routes/user.jsexports.listメソッド?関数?が呼び出される。

Controller と View

routes/index.jsをみるとこんな感じ。

index.js

/*
 * GET home page.
 */

exports.index = function(req, res){
  res.render('index', { title: 'Express' });
};

res.renderメソッドでviews/にあるテンプレファイルを読み込んで出力するみたい。

res.render(file, kv): file にはファイル名(拡張子抜き)、kvでテンプレに渡す変数を設定するっぽい。

View とか

標準では Jade というエンジンが動いてるっぽい。

Jade 文法はこんな感じ。

view/index.jade
extends layout

block content
  h1= title
  p Welcome to #{title}
view/layout.jade
doctype html
html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
  body
    block content

インデントと関数っぽい要素の渡し方でHTMLを生成するっぽい

Deploy

forever を使うのがいいっぽい

$ pwd 
/path/to/myapp
$ forever start app.js

参考とか

18
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17