Sails.js のviewは、デフォルトではURLから自動で解決して任意のviewファイルを表示してくれる。 けど、自分で指定して任意のファイルを使う場合で少しハマったので記録しておく。
参考ディレクトリ構成
views ├── 404.ejs ├── 500.ejs ├── foo │ ├── hoge.ejs │ └── index.ejs ├── error.ejs ├── home │ └── index.ejs ├── layout.ejs
ケース1
foo/hoge へのリクエストを受けた場合で、デフォルトでは、 foo/hoge.ejs
がviewに使用される。
もし、 foo/index.ejs
を使用したい場合、
res.view("foo/index");
と指定する。 http://sailsjs.org/#!documentation/views
ケース2
ここで、もし error.ejs
を指定したい場合、以下の2つは等価に見えるけど挙動が違う。
res.view("error");
res.view("./error");
後者のほうだとうまく動くけど、前者の場合、以下のようなエラーになる。
verbose: Running res.view(error) method... verbose: Error finding layout file Error: ENOENT, readdir '/Users/hiroyuki.shirakawa/Development/WORKSPACES/Sails/testProject/views/error/'
ソースコードを読んでみたけど、なんだか七面倒臭そうなことをしており、なんとも処理しずらい。なので、Sails直さないでそのまま使うことにした。