現在Nuxt.jsとechoを使ってアプリケーションを作成しています.
Postmanでform-dataにデータを入れて実行すると問題なくデータが保存されるのですが,
フロントからRequestを投げるとBindの部分でエラーが発生し保存できません.
下記がエラ〜メッセージです.
2019/11/26 00:01:05 sake_review_api.go:27: action=Insert, err=code=400, message=Request body can't be empty
Postmanからであればデータを保存できるためおそらく原因はフロント側だと思うのですが,
もし何か原因がわかれば教えていただきたいです.
よろしくお願いいたします.
以下,コードになります.
認証部分はFirebaseを使用しており,APIにRequestを投げる際にheader情報にJWTを挿入して投げています.
フロントエンド側のコードは下記の通りです.
Vue
1export default { 2 components: { SakeReview, ReviewModal }, 3 data() { 4 return { 5 modal: false, 6 title: '', 7 review: '', 8 } 9 }, 10 11 methods: { 12 async toggleReview() { 13 await this.$store.dispatch('toggleReview', { 14 uri: ROUTES.POST.TOGGLE_REVIEW.replace(':id', this.$route.params.id), 15 title: this.title, 16 review: this.review, 17 }) 18 },
Vue
1export default ({ $axios, app }) => { 2 $axios.onRequest(config => { 3 const token = app.$cookies.get('jwt_token'); 4 if (token) { 5 config.headers.common['Authorization'] = `Bearer ${token}` 6 } 7 }) 8} 9
Vue
1 async toggleReview({ commit }, payload) { 2 const client = createRequestClient(this.$axios) 3 const res = await client.post(payload.uri, { 4 "title": payload.title, 5 "review": payload.review 6 }) 7 },
API側ではJWTからUIDを取得し,そのUIDを持つデータがあればそのデータを取得し,なければ新しくUserを作成する処理をしています.
投げられたrequestをBindし,データを保存する処理をしています.
Go
1func Insert() echo.HandlerFunc { 2 return func(c echo.Context) error { 3 dbs := c.Get("dbs").(*middlewares.DatabaseClient) 4 token := c.Get("auth").(*auth.Token) 5 6 user := models.User{} 7 if dbs.DB.Table("users").Where(models.User{UID: token.UID}).First(&user).RecordNotFound() { 8 user = models.User{UID: token.UID} 9 dbs.DB.Create(&user) 10 } 11 12 review := new(models.review) 13 if err := c.Bind(review); err != nil { 14 log.Printf("action=Insert, err=%s", err.Error()) 15 return c.JSON(fasthttp.StatusInternalServerError, nil) 16 } 17 review.SakeIdentifyCode = c.Param("id") 18 review.UserID = user.ID 19 20 res := dbs.DB.Create(&review) 21 if res.Error != nil { 22 log.Printf("action=Insert, err=%s", res.Error) 23 return c.JSON(fasthttp.StatusInternalServerError, nil) 24 } 25 26 return c.JSON(fasthttp.StatusOK, res.Value) 27 } 28}
###追記
リクエストヘッダー情報
2019/11/26 08:17:47 sake_review_api.go:44: map[Accept:[application/json, text/plain, */*] Accept-Encoding:[gzip, deflate, br] Accept-Language:[ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7] Authorization:[Bearer eyJhbGciOiJSUzI1NiIsImtpkT4kFkK_Y9LGu2A] Connection:[keep-alive] Content-Length:[0] Origin:[http://localhost:3000] Referer:[http://localhost:3000/sake/P002604?sake_name=%E3%80%86&maker_name=%E4%BC%8A%E6%9D%B1%E9%85%92%E9%80%A0] Sec-Fetch-Mode:[cors] Sec-Fetch-Site:[same-site] User-Agent:[Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36]]` _0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36]]
回答1件
あなたの回答
tips
プレビュー