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

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

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

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

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

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

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 でのルーティング

ルーティング とは、アプリケーション・エンドポイント (URI) と、クライアントリクエストに対するそれらのレスポンスの定義のことです。 ルーティングの概要については、 基本的なルーティング を参照してください。 ルーティングはHTTPメソッドに対応するExpressの appオブジェクトのメソッドを使用して定義します。たとえば、GETリクエストを処理する app.get()やPOSTリクエストを処理する app.postがあります。 完全なリストについては、 app.METHODを参照してください。 また、すべてのHTTPメソッドを制御するために app.all()を、ミドルウェアを指定するために app.use()をコールバック関数として使用することができます(詳細については、 Using middleware を参照してください)。 これらのルーティングメソッドは、アプリケーションが指定されたルート(エンドポイント)とHTTPメソッドへのリクエストを受け取ったときに呼び出されるコールバック関数(ハンドラ関数とも呼ばれます)を指定します。 つまり、アプリケーションは指定されたルートとメソッドに一致するリクエストをリッスンし、一致を検出すると指定されたコールバック関数を呼び出します。 実際、ルーティングメソッドは複数のコールバック関数を引数として持つことができます。 複数のコールバック関数では、コールバック関数に引数として nextを指定し、次のコールバックに制御を渡す関数の本体内で next() を呼び出すことが重要です。 次のコードは、極めて基本的なルートの例です。 var express = require(‘express’) var app = express() // respond with “hello world” when a GET request is made to the homepage app.get(‘/’,

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

pug文法

https://github.com/du-masa/pug Node.js製のテンプレートエンジン(旧名:jade) https://pugjs.org/api/getting-started.html pugのメリットは下記です。 タグで囲んだり、属性値を省略して書くことが可能で、記述をシンプルになる ファイルを分割して、includeすることで、可読性や再利用性が高まる 変数、if文、ループ文を使うことができる タグはタグ名だけでHTML使う山カッコ( )は必要ありません。 また、閉じタグも必要ありません HTMLの入れ子構造は改行+インデントまたは、コロンで表現します。 // 改行+インデント ul li a // コロン ul: li: a ブロックレベル要素は改行+インデント、インライン要素はコロンと使い分けると読みやすいしれません。 id,classは特別な表記で表現できます。 idは#(シャープ)、classは.(ドット) で表現します。(jqueryのセレクタと同じですね) ul#list li.listItem a そのほかの属性値は 丸括弧() で表現します。 ul#list li.listItem a(href=”https://google.com” target=”_blank”) タグ内にテキストを書くには、タグの後にスペースを入れて書きます。 p |トップページのコンテンツ br |トップページのコンテンツ コメントは//(スラッシュ2つ)で表現します。バックスラッシュの後に-(ハイフン) を追加するとHTMLに出力されません。 // HTMLで書き出されるコメント //- HTMLで書き出されないコメント 任意の変数を使うことができます。 宣言は -(ハイフン)の後に var宣言

コメント

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