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

研究
OLYMPUS PEN E-PL9 (c)Maya
この記事は約2分で読めます。

この記事は1年前の記事です。当時の情報、理解に基づいておりますのでご留意ください

はじめに

早速ログイン・ログアウトボタンを実装しようと思った矢先。
昨晩使っていたサンプルコードが以下の通り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でいい気がします。

参考リンク

Express でのルーティング

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

pug文法 · GitBook

コメント

タイトルとURLをコピーしました