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