No default engine was specified and no extension was providedが発生する

たまに発生してそのたびに結構悩む。
おまけに検索結果は汚染されていて使えないし。




デフォルトエンジンが設定されていない



ググって出てくるのはほとんどこれ。
といってもこのケースはあまりないだろう。

pugを使用しているならpug.htmlならhtmlをview engineに指定する。

app.set("views", path.join(__dirname, "views"))
app.set("view engine", "pug")
// app.set("view engine", "html")



ルーティングが正しく設定されていない



例えば
app.use("/test", require("./routes/test"))
といった具合に指定していたとき、route/testが存在しないあるいはroute/testで読み込んでいるテンプレートファイルが存在しない場合はNo default engine was specified and no extension was providedが発生する。

テスト環境だとうまくいくが本番だとうまくいかない場合など必要なファイルが上がっていないというケースも有り得る。



テンプレートファイルの大文字小文字が間違っている



MacとWindowsではファイルの大文字と小文字を区別していない(設定などによる)がLinuxだと区別される。
例えばroutingに/testでtest.pugを読み込むように設定していた場合。MacだとTest.pugでも読み込むが、本番環境(Linux)に上げたときにうまくいかなくなる。


Pathの指定が間違っている



res.sendfileからres.sendFileに変更したとき(小文字から大文字)発生する。
絶対パスを指定してpathを使用する。

https://trueman-developer.blogspot.com/2020/10/expresspath-must-be-absolute-or-specify.html#more


だいたいこのあたりを網羅すれば解決できるかと。

2020年8月14日金曜日