読者です 読者をやめる 読者になる 読者になる

Sails.js の res.view() でのviewファイル指定の仕方の話

Tech JavaScript

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直さないでそのまま使うことにした。