express 内容確認など

ちょっとメモ代わりてきエントリってことで。
ココからオトしたナニを読んでます。手元にあるソースのコミットは 860b4f1a3bdf とかそんなカンジ。10/30 なのでおそらくエッヂなナニはもう少し進んでいるのだろうな。

node な repl で

色々確認。ページャ使えないのかなぁ。

$ node
> var exp = require('./express');
> exp.version
'3.0.0alpha1'
> 

ここで exp を評価 (eval) すると当たり前ですが require した module なオブジェクト (という言い方で合ってるのかどうか) が見える模様。
で、exp.createServer(); とかってソレを評価 (eval) するとどうなるかというと

> exp.createServer();
TypeError: Object function createApplication() {
  var app = connect();
  utils.merge(app, proto);
  app.init();
  return app;
} has no method 'createServer'
    at repl:1:5
    at REPLServer.eval (repl.js:76:28)
    at repl.js:183:20
    at REPLServer.eval (repl.js:80:5)
    at Interface.<anonymous> (repl.js:175:12)
    at Interface.emit (events.js:67:17)
    at Interface._onLine (readline.js:162:10)
    at Interface._line (readline.js:426:8)
    at Interface._ttyWrite (readline.js:603:14)
    at ReadStream.<anonymous> (readline.js:82:12)
>

これは express.js で

exports = module.exports = createApplication;

しているので、exp なオブジェクトは基本的には手続きオブジェクトなのか。そこに属性がもごもごくっついてる、という理解でよいのかどうか。
えー、でも express なコマンドで作成される scaffold な app.js は

var express = require('express')
  , routes = require('./routes')

var app = module.exports = express.createServer();

な記述があるのだけれど、これは一体どーゆーことなのか。
ってこの express は若干バージョンがアレなのかどうか。

$ node
> var express = require('express');
> express.version
'2.5.0'
> var app = module.exports = express.createServer();
> app
{ stack: [ { route: '', handle: [Function] } ],
  connections: 0,
  allowHalfOpen: true,
  _handle: null,
  _events: 
   { request: [Function],
     connection: [Function: connectionListener],
     listening: [Function] },
  httpAllowHalfOpen: false,
  cache: {},
  settings: { env: 'development', hints: true },
  redirects: {},
  isCallbacks: {},
  _locals: 
   { settings: { env: 'development', hints: true },
     app: [Circular] },
  dynamicViewHelpers: {},
  errorHandlers: [],
  route: '/',
  routes: 
   { app: [Circular],
     routes: {},
     params: {},
     _params: [],
     middleware: [Function] },
  router: [Getter] }
>

何〜、って言いつつ express を評価 (eval) してみたらorz

> express
{ favicon: [Getter],
  router: [Getter],
  limit: [Getter],
  csrf: [Getter],
  static: [Getter],
  compiler: [Getter],
  directory: [Getter],
  query: [Getter],
  logger: [Getter],
  session: [Getter],
  vhost: [Getter],
  profiler: [Getter],
  cookieParser: [Getter],
  bodyParser: [Getter],
  staticCache: [Getter],
  methodOverride: [Getter],
  errorHandler: [Getter],
  responseTime: [Getter],
  basicAuth: [Getter],
  version: '2.5.0',
  createServer: [Function],
  HTTPServer: [Function: HTTPServer],
  HTTPSServer: [Function: HTTPSServer],
  Route: [Function: Route],
  view: 
   { [Function: View]
     register: [Function],
     compile: [Function],
     lookup: [Function] },
  View: 
   { [Function: View]
     register: [Function],
     compile: [Function],
     lookup: [Function] } }
> 

なんか手元のソースツリーに Readme.md があるのですが以下な記述があります。

## Node Compatibility

Express 1.x is compatible with node 0.2.x and connect < 1.0.

Express 2.x is compatible with node 0.4.x and connect 1.x

Express 3.x (_master_ branch) is compatible with node 0.6.x and connect 2.x

このあたりも鑑みて、ということが必要なんスね。

てことは

3.x じゃなくて 2.x (手元の express は 2.5.0) なナニを読むべき、なのかそれともエッヂな 3.x ソースを見るべきなのか。
漢はエッヂだろ、という天の声が聞こえはしてますがorz