res.render 確認など
なんか少し前にもごもごと確認入れたような気もするのですが構わず確認。
view.js で定義されてる res.render は直下で定義されている private な _render を呼び出します。
res.render = function(view, opts, fn, parent, sub){ // support callback function as second arg if ('function' == typeof opts) { fn = opts, opts = null; } try { return this._render(view, opts, fn, parent, sub); } catch (err) {
で、_render 手続きでは compile して
// View lookup options.hint = app.enabled('hints'); view = exports.compile(view, app.cache, cid, options);
その中でセットされる view.fn を call します。
// render var str = view.fn.call(options.scope, options);
compile 手続きの確信部分が以下。
// compile options.filename = view.path; view.fn = view.templateEngine.compile(view.contents, options); cache[cid] = view; return view; };
view.templateEngine.compile って何だ。とりあえず templateEngine で grep したら以下がナニ。
View.prototype.__defineGetter__('templateEngine', function(){ var ext = this.extension; return cache[ext] || (cache[ext] = require(this.engine)); });
engine ってのが出てきた。コンストラクタなのかどうかな手続きで以下な初期化。
this.engine = this.resolveEngine();
resolvEngine が以下、なのかなぁ。
View.prototype.resolveEngine = function(){ // Explicit if (~this.basename.indexOf('.')) return extname(this.basename).substr(1); // Inherit from parent if (this.parent) return this.parent.engine; // Default return this.defaultEngine; };
defaultEngine は以下らしい。
this.defaultEngine = options.defaultEngine;
ぬ。defaultEngine で find-grep してみたら以下らしい。
find . -type f -print0 | xargs -0 -e grep -nH -e defaultEngine ./view.js:77: * - `defaultEngine` default template engine ./view.js:382: options.defaultEngine = app.set('view engine'); ./view/view.js:45: this.defaultEngine = options.defaultEngine; ./view/view.js:88: return this.defaultEngine;
382 なナニは _render な記述らしい。'view engine' で find-grep してみたのが以下。
find . -type f -print0 | xargs -0 -e grep -nH -e 'view engine' ./view.js:256: , viewEngine = app.set('view engine') ./view.js:268: // utilize "view engine" option ./view.js:381: // "view engine" setting ./view.js:382: options.defaultEngine = app.set('view engine'); ./view/view.js:76: * Resolve view engine.
'view engine' で example 配下を find-grep してみるか。
find . -type f -print0 | xargs -0 -e grep -nH -e 'view engine' ./route-separation/app.js:14:app.set('view engine', 'ejs'); ./error-pages/app.js:13:app.set('view engine', 'jade'); ./flash/app.js:18:app.set('view engine', 'ejs'); ./auth/app.js:16:app.set('view engine', 'ejs'); ./json-config/config.js:7: 'view engine': 'jade' ./jade/app.js:32:app.set('view engine', 'jade'); ./ejs/app.js:17:app.set('view engine', 'html'); ./blog/app.js:14:app.set('view engine', 'jade'); ./github/app.js:14:app.set('view engine', 'jade'); ./mvc/mvc.js:39: app.set('view engine', 'html'); ./partials/app.js:17:app.set('view engine', 'jade'); ./markdown/app.js:29:app.set('view engine', 'md'); ./extending-templates/app.js:17:app.set('view engine', 'html'); ./layout-control/app.js:18:app.set('view engine', 'ejs');
を、成程。とは言え ejs とか jade とかな engine ってどこに記述されてるのだろう。って package.json 見てみたら devDepandencies に以下な記述がありますな。
"devDependencies": { "connect-form": "0.2.1", "ejs": "0.4.2", "expresso": "0.9.2", "hamljs": "0.5.1", "jade": "0.16.2", "stylus": "0.13.0", "should": "0.3.2", "express-messages": "0.0.2", "node-markdown": ">= 0.0.1", "connect-redis": ">= 0.0.1" },
しかしこの devDepandencies というナニは一体どーゆー意味なのだろうか。ちょっと確認必要ッスな。