問題タブ [gorilla]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
go - インターフェイスの戻り値の型を持つインターフェイス メソッドの定義
TLDR これは、実行しようとした場合に問題を示すプレイグラウンドです: https://play.golang.org/p/myQtUVg1iq
私は REST API を作成しており、GET 要求を介して取得できる多くの種類のリソースがあります。
さまざまなリソースがどのように実装されているかを抽象化するモデル パッケージがあります。
ルート ファイルは、すべてのルートとハンドラーをセットアップします。
インターフェイスを作成し、単一の GetHandler のみを必要とすることで、これをより一般的なものにしようとしています。このようなもの:
これは本当に動作に近いです。唯一の問題は、モデルからの戻り値の型が特定のオブジェクト型であることですが、インターフェイスはインターフェイスの戻り値の型を使用しているだけです。モデルを返さずにこれを解決する方法はあります[]interface{}か?
rest - REST でサポートされていない HTTP メソッドで返される応答コードは何ですか?
Gorilla Mux を使用して、REST API の HTTP ルートを処理しています。API に次のバインディングを使用しています。
次に、次のように CURL を実行します。
予想どおり、メソッドAPIUsersは呼び出されません。私は200 OK戻ってきます:
たとえば、失敗したすべての関数を指定された関数にバインドするために、Gorilla でこれを別の方法で行う必要がありますか? また、サポートされていない関数で返される典型的な HTTP コードは何だろうと思います。私は400範囲内のコードを想定していますが、どちらを使用すればよいかわかりません。200リクエストは " " ではなかったので、そうであってほしくありませんOK。
このテーマに関するアイデアやヒントはありますか?
http - ミドルウェアから gorilla/mux ルーターの現在のルート名を取得する
問題: ミドルウェアから mux.CurrentRoute(r).GetName() にアクセスできません。(ミドルウェアからアクセスできましたが、以前はリクエストにアクセスできなかったため、ミドルウェアの動作方法を変更する必要がありました)。そのため、何かをいじってしまい、ルート名にアクセスできる作業状態に戻す方法がわかりません。
どんな助けでも大歓迎です!
エラー:
コード:
更新 (2015-01-04 @ 4:49PM EST): したがって、ミドルウェアを削除した後 (または、少なくとも mux.CurrentRoute を読み取ろうとしているセクションをコメントアウトした後)、宛先の handlerfunc からルート名を取得できます (例: usersCreateHandlerFunc または BrandsCreateHandlerFunc)。これは私の問題を解決しません (すべての handlerfunc とは対照的に、ミドルウェアで認証/承認を実行したいのですが)、*mux.Router は最終的な後までミドルウェアで使用できないことを知らせてくれる予感があります。 .ServeHTTP 呼び出し。(または、それらの線に沿った何か...)
更新 (2015 年 1 月 4 日 @ 午後 5 時 41 分 EST): Negroni をミドルウェア コンポーネントとして使用する別の方向 (あまり好まれませんが) を試しました。mux.CurrentRoute を取得しようとすると、まだ nil-pointer エラーが発生します。
更新 (2015-01-04 @ 6:17PM EST): ミドルウェア機能からリクエスト (例: r.URL) にアクセスできますが、mux.Route (例: mux.CurrentRoute( r)))。マルチプレクサのソースをもう少し調べたところ、ルーターがまだマッチャーを実行していないため、現在のマルチプレクサ コンテキストが設定されていないことが原因だと思います (したがって、ミドルウェアが処理されるまで現在のルートがわからないためです)。完了です)。ただし、これを解決する方法、またはこれを処理するためにコードを再構築する方法はまだわかりません。
go - Golang net/http と Gorilla: ハンドラーの前にコードを実行する
net/http パッケージやゴリラ ライブラリのいずれかを使用して、ハンドラーに移動する前にすべての URL でコードを実行することは可能ですか? たとえば、接続がブラックリストの IP アドレスからのものかどうかを確認するには?
go - キーでゴリラセッション値を取得できません
この方法ではセッションから値を取得できません。次のnilとおりです。
完全なコード:
出力:
まず、URL を開いhttp://localhost:3000/setSessionて出力を取得します。
次に、URL を開いhttp://localhost:3000/getSessionて出力を取得します。
valWithOutTyperequesting に設定したのに、なぜnil なの/setSessionですか?
アップデート
@iszaの回答に従ってコードを変更しましたが、セッション値はまだnil.
go - サブパス ルーティング用の Gorilla Mux
次のルートがあります。
ルートが増えるにつれて、管理が難しくなります。
私は次のようなことをしたい:
すべてのハンドラーが別のパッケージに分離されている
別のパッケージでこれらのパスを一致させる方法はありますか?
ありがとう、
go - curl リクエストを処理する Gorilla Mux
Gorilla mux を使用して API リクエストを処理したいと考えています。
コマンドは次のようになります。
curl http://0.0.0.0:8000/api/myapiname/v1?number=10&target=google.com&message=hello
そして、私は次のハンドラーを提供しています:
しかし、curlリクエストの場合、numbernottargetおよびmessageのフォーム値のみを取得します
Gorilla mux を使用して API リクエストを処理する正しい方法は何ですか? サブルーティングは必要ですか?
http://0.0.0.0:8000/api/myapiname/v1?number=10&target=google.com&message=helloフォームの http リクエストを受け取り、そのキーを値にマップできるようにしたいだけです
ありがとう!