2012-11-26

[Express] Cannot GET /foobar はどこで出されているか

Express で全てのコールバックがレスポンスを返さなかった場合に表示される Cannot GET /foobar という感じの 404 エラーページは誰が出しているのかというと、express.js の依存ライブラリ Connectlib/proto.js で関数 app.handle が出力しています。

ルーターを含む全ての Middleware が next() を行って最後まで突っ走ってしまうと Cannot ... のコードに到達します。

ちなみに Middleware 内で next() をせず res.send() などでレスポンスを返すこともしなかった場合は、クライアント側からの見え方は延々と何もレスポンスが返らない状態になり、一方でサーバーもエラーを出すことのない両者にらみ合いの膠着状態になります。