无法在Go中获取Angular / Restangular表单数据

时间:2014-07-06 01:15:22

标签: angularjs go restangular gorilla

我有一个Go rest服务,工作正常,我可以使用Chrome REST插件获取表单数据。 我需要从我的Angular应用程序获取表单数据到服务,到目前为止我无法弄明白。

My Angular code:

<form name="myForm">
<div class="control-group" ng-class="{error: myForm.name.$invalid}">
    <label>Drug Name</label>
    <input type="text" name="drugName" ng-model="drug.name" required>
      <span ng-show="myForm.drugName.$error" class="help-inline">
                                                    Required</span>
</div>
<a href="#/" class="btn">Cancel</a>
<button ng-click="save()" ng-disabled="isClean() || myForm.$invalid"
                                        class="btn btn-primary">Save</button>
<button ng-click="destroy()" ng-show="project._id"
                                        class="btn btn-danger">Delete</button>
</form>

我的app.js CreateCtrl,我设置RestangularProvider.setBaseUrl('/rest/v1');

function CreateCtrl($scope, $location, Restangular) {
$scope.save = function() {
    Restangular.all('drugs/').post($scope.drug).then(function(project) {
        $location.path('/list');
    });
}
}

在我的Go代码中,我使用的是大猩猩,以下是相关部分:

http.Handle("/rest/v1/drugs/", drugs.MakeMuxer("/rest/v1/drugs/"));
func MakeMuxer(prefix string) http.Handler {

log.Println("**** drugs.MakeMuxer(): " + prefix);

var m *mux.Router

// Pass through the prefix if we have one.
if prefix == "" {
    m = mux.NewRouter()
} else {
    m = mux.NewRouter().PathPrefix(prefix).Subrouter()
}


m.HandleFunc("/", CreateDrug).Methods("POST")

// Everything else should 404.
//m.HandleFunc("/{path:.*}", gorca.NotFoundFunc)

return m
}

func CreateDrug(w http.ResponseWriter, r *http.Request) {

log.Println("**** CreateDrug.... ");
log.Println("drugName: " + r.FormValue("drugName"))
//c := appengine.NewContext(r)

}

我可以看到POST正在进入&#34; CreateDrug&#34;,但是r.FormValue("drugName")是空的(当我使用浏览器休息插件并设置&#34; drugName&#34时它不是空的有些价值。

1 个答案:

答案 0 :(得分:0)

您需要致电r.ParseForm(),然后才能致电r.FormValue

//修改

查找angularjs后,我发现它将数据作为json发送,因此您必须使用json.NewDecoderexample

type Drug struct {
    Name string `json:"drugName"`
}
func CreateDrug(w http.ResponseWriter, r *http.Request) {
    defer r.Body.Close()
    var d Drug
    dec := json.NewDecoder(r.Body)
    dec.Decode(&d)
    log.Println("**** CreateDrug.... ")
    log.Println("drugName:", d.Name)
}