【Node.js】Expressでのルーティングのget、postの書き分けに引っかかった

投稿者:

はじめに

早速ログイン・ログアウトボタンを実装しようと思った矢先。
昨晩使っていたサンプルコードが以下の通りrouter.postを使っており。

router.post('/create', async function(req, res) {
  // 略
  res.redirect('/');
});

ログインフォームはどの道postメソッドを使うので引っかかることはなく。

ログイン済セッションを持っている場合の画面まで作ったはいいんですが、当初上記の通りログアウトをgetリンクにしていたので、postでのボタンが動作せず。

getとpostを書き分けなくてはならないのか

router.post('/logout', async function(req, res) {
  req.session.destroy((err) => {
    if (err) {
      res.send(err)
      return
    }
  })
  res.redirect('/');
});

router.get('/logout', async function(req, res) {
  req.session.destroy((err) => {
    if (err) {
      res.send(err)
      return
    }
  })
  res.redirect('/');
});

このrouter.postのメソッドしか書いてなかったので、ログアウトをform method=postで対応するもしくは下のrouter.getのメソッドを書いて対応するのとやり方は2つあります。

ただ同じ命令を2メソッド書く理由はないので、問題ない限りは

router.all('/logout', async function(req, res) {
  req.session.destroy((err) => {
    if (err) {
      res.send(err)
      return
    }
  })
  res.redirect('/');
});

の様に、router.allでいい気がします。

参考リンク

https://expressjs.com/ja/guide/routing.html

あとpug文法が慣れると楽しいです。

https://du-masa.github.io/study-frontend/pug/pug-lang.html

コメントを残す