DRYな備忘録

Don't Repeat Yourself.

Node on expressへのGETリクエストがNotFound【Node.js】【express】

【問題】

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