웹 요청 내용 파싱 미들웨어 작성
이번에는 POST에 전송된 Form 데이터를 Context의 Parmas에 담는 parseFormHandler와 JSON 데이터를 해석해서 Context의 Parmas에 담는 parseJsonBodyHandler를 작성해 보자.
▼ middleware.go
func parseFormHandler(next HandlerFunc) HandlerFunc { return func(c *Context) { c.Request.ParseForm() fmt.Println(c.Request.PostForm) for k, v := range c.Request.PostForm { if len(v) > 0 { c.Params[k] = v[0] } } next(c) } } func parseJsonBodyHandler(next HandlerFunc) HandlerFunc { return func(c *Context) { var m map[string]interface{} if json.NewDecoder(c.Request.Body).Decode(&m); len(m) > 0 { for k, v := range m { c.Params[k] = v } } next(c) } }
POST로 /users URL을 통해 웹 요청이 전달되었을 때 전달된 정보를 그대로 출력하는 핸들러를 작성해 보자.
▼ main.go
r.HandleFunc("POST", "/users", logHandler(recoverHandler(parseFormHandler(parseJsonBodyH andler(func(c *Context) { fmt.Fprintln(c.ResponseWriter, c.Params) })))))
Form 데이터와 JSON 데이터를 POST로 전송하여 핸들러가 잘 동작하는지 확인해 보자.
$ curl -d name=jaehue http://127.0.0.1:8080/users
map[name:jaehue]
$ curl -d {\"name\":\"jaehue\"} http://127.0.0.1:8080/users
map[{"name":"jaehue"}:]