ホームページ >バックエンド開発 >Golang >Go/Gin でミドルウェア チェーンを停止できません

Go/Gin でミドルウェア チェーンを停止できません

王林
王林転載
2024-02-09 13:15:28530ブラウズ

无法停止 Go/Gin 中的中间件链

PHP の世界では、ミドルウェア チェーンは一般的な開発モデルであり、リクエストの処理、検証および承認操作などの実行に役立ちます。ただし、Go Web フレームワークである Gin では、ミドルウェア チェーンの動作が少し異なります。停止できないミドルウェア チェーンを使用します。つまり、前のミドルウェアにエラーがあるかどうかに関係なく、各ミドルウェアが実行されます。この設計によりコードは複雑になりますが、柔軟性とカスタマイズ性も向上します。この記事では、PHP エディタ Apple による Jin フレームワークのミドルウェア チェーンの動作原理と使用法を詳しく紹介します。

質問内容

リクエストを進める前にセッションを確認したいのですが、セッションを確認するためのミドルウェアがあります。これがエンドポイントです:

リーリー

これは checksession() ミドルウェアです。値はプレースホルダー atm:

リーリー ###ログ:

まず、

"/" ルートにアクセスします。これは /profile/:pid エンドポイントにリダイレクトされ、「無効な」セッションの場合は # にリダイレクトされます ## /sign-in エンドポイント。 /sign-in エンドポイントに再ルーティングされていますが、c.next() をクリックしなくても、/profile/:pid エンドポイントは実行を完了します。 これらを

if-else

ブロックに配置して、c.redirect()c.next() の 1 つだけが実行されるようにしてください。 #回避策

このエラーは、ミドルウェア チェーンを手動で中止しなかったことが原因で発生します。

c.Redirect()

はミドルウェア チェーンを停止しません。手動で

c.Abort() を呼び出して、残りのハンドラーが実行されないようにする必要があります。 c.Abort()

ツールヒント:

中止により、保留中のハンドラーが呼び出されなくなります。これによって現在のハンドラーは停止されないことに注意してください。現在のリクエストが承認されていることを検証する承認ミドルウェアがあるとします。認証が失敗した場合 (例: パスワードの不一致)、Abort を呼び出して、このリクエストの残りのハンドラーが呼び出されないようにします。

以上がGo/Gin でミドルウェア チェーンを停止できませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。