Я использую ресурс angularJS $ у своего клиента и хочу создать пользовательскую функцию PATCH, где я отправляю данные на мой сервер GO. Я хочу проанализировать данные на моем сервере GO в структуре. Я попытался отправить данные как код ниже, но сервер GO выводит значения как "Объект объекта" и генерирует ошибку, когда я пытаюсь ее маршалировать. Должны ли данные быть включены в строку запроса для 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 {
}
}
Я не знаю, как использовать ресурс 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
}
Надеюсь, это поможет!