ホームページ >バックエンド開発 >Golang >Negroni を使用してルート固有のミドルウェアを実装するにはどうすればよいですか?

Negroni を使用してルート固有のミドルウェアを実装するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-24 08:33:30420ブラウズ

How to Implement Route-Specific Middlewares with Negroni?

Negroni を使用したルート固有のミドルウェア: 認証のカスタマイズ

httprouter と Negroni を使用する Web アプリケーションでは、ミドルウェアを適用する必要が生じる場合があります。他のルートを除外しながら特定のルートにアクセスします。たとえば、認証ミドルウェアを使用してユーザーのログイン ステータスを確認できますが、特定のページでは必要ない場合があります。

Negroni は、ルート固有のミドルウェアを処理する多目的な方法を提供します。この解決策には、固有のミドルウェアが必要なルートごとに個別の Negroni インスタンスを作成することが含まれます。

提供されたコード例では、/login ルートは認証を必要としませんが、/ ルートは認証を必要とします。これを実現する方法は次のとおりです。

<code class="go">router := httprouter.New()
router.Handler("GET", "/login", negroni.New(negroni.HandlerFunc(loginHandler)))
router.Handler("GET", "/", negroni.New(authenticator.Get(), negroni.HandlerFunc(indexHandler)))

server := negroni.Classic()
server.UseHandler(router)
server.Use(sessions.Sessions("example-web-dev", cookiestore.New([]byte("some secret"))))
server.Run(":3000")</code>

ルートごとに個別の Negroni インスタンスを作成することで、開発者はアプリケーションのさまざまな部分にさまざまなミドルウェア チェーンを適用できます。この場合、/login ルートは negroni.Classic() によって提供されるミドルウェアとサーバーに追加されたセッション ミドルウェアのみを使用しますが、/ ルートはさらに、authenticator.Get() で作成されたミドルウェアを使用します。

loginHandler と IndexHandler はどちらも特定のメソッド シグネチャに従う必要があります:

<code class="go">func(http.ResponseWriter, *http.Request, http.HandlerFunc)</code>

このアプローチにより、アプリケーションの成長に合わせたスケーラビリティが提供され、ルート固有のミドルウェア要件を簡単に管理できるようになります。

以上がNegroni を使用してルート固有のミドルウェアを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。