2017-12-18 9 views
1

私は、パラメータが定義されていない状況を処理したいと思います。変数が定義されていない場合、Muxが返しますか?

import (
    // ... 
    "github.com/gorilla/mux" 
) 

func main() { 
    router := mux.NewRouter() 
    router.HandleFunc("/connect", Connect).Methods("POST") 
    log.Fatal(http.ListenAndServe(":7777", router)) 
} 



// ... 

func Connect(w http.ResponseWriter, r *http.Request) { 
    params := mux.Vars(r) 

    if params["password"] == nil { 
     fmt.Println("login without password") 
    } else { 
     fmt.Println("login with password") 
    } 
} 

また、私はこのために右の構文は何if !params["ssid"] {

を試してみましたか?

curl -H 'Content-Type: application/json' -d '{"ssid":"wifi"}' -X POST http://localhost:7777/connect 

ssidが必要とされているが、passwordはオプションです:mux.Vars(r)


私はからポストのparamsを捕獲しようとしています。

params := mux.Vars(r) 
password, ok := params["password"] 
if ok { 
    // password is set 
} else { 
    // password is not set 
} 

このコードは、マップ内のキーの存在を確認するためにthe two value index expressionを使用しています。

+0

あなたはどのフレームワーク/ライブラリを使用していますか? mux.Varsは何を返しますか? – Howl

+0

@CeriseLimónキャプチャしようとしているパラメータで質問を更新しました。 –

+0

@Howl https://github.com/gorilla/muxを使用しています –

答えて

3

は、マルチプレクサ要求変数の存在を確認するには、次を使用します。

JSONリクエストボディを解析し、mux変数にアクセスしないようにしているようです。あなたのハンドラでこれを行います:

var m map[string]string 
err := json.NewDecoder(r.Body).Decode(&m) 
if err != nil { 
    // handle error 
} 
password, ok := m["password"] 
if ok { 
    // password is set 
} else { 
    // password is not set 
} 
+0

paramsを正しく使用していればこれが正しいと思います(?)私はそれが正しいかどうかわかりません'ok'の中で実行されますが、単に空白を表示します。 –

関連する問題