2017-01-16 48 views
-1

我試圖使用VueJS向Beego框架(GoLang)中編寫的應用程序發出簡單的POST請求,但應用程序沒有看到任何輸入請求。當我使用標準格式請求(沒有ajax)時,一切正常。 這是我的VueJS代碼:Beego不接受阿賈克斯params

storePost: function(event) { 
    axios.post("/api/posts/store", {body: "test"}).then(function(response) { 
     if (response.data.status == 200) { 
      this.posts.push(response.data.data); 
     }else { 
      console.log("error"); 
     } 
    }, function(response){ 
     console.log("error"); 
    }); 
} 

,這是我Beego代碼:

// router.go 
beego.Router("/api/posts/store", &controllers_API.PostsController{}, "post:Store") 

// PostsController.go 
func (this *PostsController) Store() { 
    fmt.Println(this.GetString("body")) 

    // some irrelevant code which handles the response... 
} 

fmt.Println始終打印什麼。當我使用標準表格fmt.Println打印body的值沒有問題。

+0

你能看到在開發人員工具下的網絡選項卡中的有效載荷流量嗎?只是爲了確保有實際的數據被髮送到服務器。 – Sombriks

+0

沒有beego專家,但它可能是一個頭部方法端點也需要,如果你去跨域 – RickyA

+0

@Sombriks我檢查,並有數據{body:「test」} – Alen

回答

0

Beego似乎只接受帶有這個標頭的數據:'Content-Type': 'multipart/form-data'所以在我添加標題後,一切正常。 因爲我不知道該怎麼做,與axios我切換到vue-resource這是示例代碼與Beego工作:

this.$http.post("/", {test: "test"}, { 
    emulateJSON: true 
}); 

現在你可以打印這樣的:

fmt.Println(this.GetString("test")) 

我希望這可以幫助別人

0

剛剛證實axios和vue-resource默認使用application/json。您在此處使用的emulateJSONtells vue-resource to use application/x-www-form-urlencoded。您可能只需要在beego中執行json解碼,因爲它默認將請求主體視爲urlencoded

multipart/form-data工作原因可能是因爲它已經存在了很長時間(如urlencoded),因此beego默認會識別它。要使用vue-resource發佈multipart/form-data請求:use FormDataAxios also accepts a FormData as data