【問題】
Node.jsで
//Routes app.get("/", routes.index); app.get("/hoge", routes.hoge);
で待ち構えたGETリクエストがブラウザ側でNotFoundになる
【原因】
app.jsからの「routes.hoge」参照先が違った。
間違い
projectDir ┃ ┣ node_modules ┃ ┣ public ┃ ┣ view ┃ ┣ routes ┃ ┣ index.js ┃ ┗ hoge.js ┃ ┗ app.js
app.jsの中身
前略 // Routes app.get("/", routes.index); app.get("/hoge", routes.hoge); 後略
routes/index.js
exports.index = function(req, res){ console.log(req); res.render('index', { title: "This is Home Page!!" }); };
routes/hoge.js
exports.hoge = function(req, res){ res.send({ "data" : "This is Data!!" }); };
とすれば、routesのなかのindexやhogeが呼ばれているのだと思っていた。
【解決】
正しくは以下。
routes.indexとroutes.hogeは「routesの中の(index.jsの中に定義されてる)プロセス名」
projectDir ┃ ┣ node_modules ┃ ┣ public ┃ ┣ view ┃ ┣ routes ┃ ┗ index.js ┃ ┗ app.js
app.jsの中身
前略 // Routes app.get("/", routes.index); app.get("/hoge", routes.hoge); 後略
routes/index.js
// reaction to GET "/" exports.index = function(req, res){ console.log(req); res.render('index', { title: "This is Home Page!!" }); }; // reaction to GET "/hoge" exports.hoge = function(req, res){ res.send({ "data" : "This is Data!!" }); };
【雑感】
結構ハマった。
DRY