从angularJS发送JSON数据,以便Go服务器可以解析为struct

时间:2016-05-20 13:13:27

标签: angularjs json go

我在客户端使用angularJS $资源,想要创建一个自定义PATCH函数,我将数据发送到GO服务器。我想将GO服务器上的数据解析为结构。我尝试发送类似下面的代码的数据,但GO服务器输出的值为' [object Object]'当我试图整理它时会产生错误。数据是否应作为PATCH的查询字符串包含在内,还是应该包含在请求主体中?

var UpdateOneSchedule = $resource('/schedules/me/:bkchangeobject', {bkchangeobject:{}},{
    update:{
        method: 'PATCH',
        isArray: false,
    }
});
来自我的PATCH请求的

代码段

            var updateObject = {"title":"value", "description":"value"}
            console.log(updateObject)


            UpdateOneSchedule.update({bkchangeobject:updateObject},
            function(data){
                //on success
            },
            function(httpResponse){
                //on error
                if(httpResponse.status === 409){ //StatusConflict
                    //
                    revertFunc()
                }
            });

go服务器看起来像这样

func (db *bkDatabase) updateSchedule(w http.ResponseWriter, r *http.Request) {
    bkDB := bkDatabase{db.session.Copy()}
    defer bkDB.closeDB()

    //check tokens
    if bkSystem.db.isAuthorized(w, r) {
        param := mux.Vars(r)["bkchangeobject"]
        fmt.Println(param)
        var change_object event

        err := json.Unmarshal([]byte(param), &change_object)
        if err != nil {
            log.Fatalf("JSON Unmarshal error: %v", err)
        }
        fmt.Println(change_object)


    } else {

    }
}

1 个答案:

答案 0 :(得分:0)

我不知道如何使用angularJS $资源,我是angularJS的新手。 但是我已经用类似的东西做了类似的事情:

在我的控制器中,我声明了将发送到服务器端的对象:

$scope.message = {
  From: {
    Email: '',
    Name: ''
  },
  Subject: '',
  Content: ''
}

此对象链接到范围,因此可以由用户填写。 我还创建了一个将对象发送到服务器端的服务:

.service('ContactService', function ($http) {
this.url = 'http://url.toyourwebservice.golang/what/you/want';

this.send = function (contact) {
  return $http.post(this.url, contact);
};

});

这样,在服务器端,我可以检索请求体中的对象:

b, err := ioutil.ReadAll(r.Body)
    if err != nil {
        return err
    }
if len(b) != 0 {
    err = json.Unmarshal(b, contact)
    if err != nil {
        return err
    }
    // Do whatever you want with contact
}

希望这有帮助!