在Go问题中获取URL参数

时间:2015-07-31 19:09:03

标签: go

我的网址如下所示:http://localhost/templates/verify?key=ijio

我的路由器看起来像这样:

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

ctx := &model.AppContext{db, cfg} // passes in database and config
verifyUser := controller.Verify(ctx)
mx.Handle("/verify", commonHandlers.ThenFunc(verifyUser)).Methods("GET").Name("verify")

我想从URL中获取关键参数,因此我使用以下代码:

func Verify(c *model.AppContext) http.HandlerFunc {
    fn := func(w http.ResponseWriter, r *http.Request) {

    key := r.URL.Query().Get("key") // gets the hash value that was placed in the URL
    log.Println(key) // empty key
    log.Println(r.URL.Query()) // returns map[]
    // code that does something with key and sends back JSON response
   }
}

我使用AngularJS来获取JSON数据:

app.controller("verifyControl", ['$scope', '$http', function($scope, $http) {
    $scope.message = "";
    $http({
      method: 'GET',
      url: "/verify"
    }).success(function(data) {
         $scope.message = data.msg; // JSON response 
   });

  }]);

但是,当我尝试将其打印出来时,我最终得到一个空键变量。我最近使用nginx来取出我的.html扩展名,如果这可能是导致此问题的原因。我该如何解决?

1 个答案:

答案 0 :(得分:0)

我的问题的解决方案涉及通过

检查请求URL链接
log.Print(r.URL) // This returns "/verify"

但是,这并不是你想要的。相反,您需要完整的URL。您可以执行以下操作以获取完整URL并从中提取参数:

urlStr := r.Referer()             // gets the full URL as a string
urlFull, err := url.Parse(urlStr) // returns a *URL object
if err != nil {
    log.Fatal(err)
    return
}
key := urlFull.Query().Get("key") // now we get the key parameter from the URL
log.Println("Key: " + key) // now you'll get a non empty string