don't stop believing

Another example: query + post form 본문

Golang/Gin

Another example: query + post form

Tongchun 2019. 2. 15. 00:13

지난 Posting에 이어 하나 더 해보겠습니다.

Multipart/Urlencoded Form


html 페이지의 form tag 중 action의 값인 url에 query string이 붙어있는 경우 입니다.

https://github.com/gin-gonic/gin#another-example-query--post-form

<html> <head> <title>Tongchun's go gin</title> </head> <body> <form action="http://localhost:8080/form_post_with_querystring?id=dejavu&page=34" method="POST"> message: <input type="text" name="message"> nick: <input type="text" name="nick"> <input type="submit" value="Submit"> </form> </body> </html>

form의 action으로 넘기는 url에 주렁주렁 query string이 달려 있습니다.

http://localhost:8080/form_post_with_querystring?id=dejavu&page=34


이럴때 query string의 parameter와 form tag로 전달되는 post 데이터를 같이 받는 방법입니다.

package main

import (
	"strconv"

	"github.com/gin-gonic/gin"
)

func setupRouter() *gin.Engine {
	// Disable Console Color
	// gin.DisableConsoleColor()
	r := gin.Default()

	r.POST("/form_post_with_querystring", formPost)

	return r
}

func formPost(c *gin.Context) {
	id := c.Query("id")
	strPage := c.DefaultQuery("page", "0")
	intPage, _ := strconv.Atoi(strPage)

	message := c.PostForm("message")
	nick := c.DefaultPostForm("nick", "anonymous")

	headerType := c.GetHeader("Content-Type")

	c.JSON(200, gin.H{
		"status":              "posted",
		"message":             message,
		"nick":                nick,
		"header-content-type": headerType,
		"id":                  id,
		"page":                intPage,
	})
}

func main() {
	r := setupRouter()
	// Listen and Server in 0.0.0.0:8080
	r.Run(":8080")
}

우선 주의해야 할 사항은 QueryString의 parameter와 Form tag의 post 데이터를 같이 받으려면 header의 Content-Type은 "application/x-www-form-urlencoded"여야 합니다.


go를 실행하고 데이터를 보내 보겠습니다.

$ go run server.go 
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:	export GIN_MODE=release
 - using code:	gin.SetMode(gin.ReleaseMode)

[GIN-debug] POST   /form_post_with_querystring --> main.formPost (3 handlers)
[GIN-debug] Listening and serving HTTP on :8080

html 페이지를 열고 데이터를 보내보겠습니다.

QueryString의 데이터와 Form tag의 Post 데이터가 모두 확인되었습니다.


Postman으로보내려면 아래와 같이 실행합니다.

여기까지 Form tag의 Post 데이터와 QueryString 모두 확인하는 방법이었습니다.


'Golang > Gin' 카테고리의 다른 글

Upload files  (0) 2019.02.27
Map as querystring or postform parameters  (0) 2019.02.27
Multipart/Urlencoded Form  (1) 2019.02.14
Querystring parameters  (0) 2019.02.14
Parameters in path  (0) 2019.02.13
Comments