더북(TheBook)

웹 요청 내용 파싱 미들웨어 작성

이번에는 POST에 전송된 Form 데이터를 ContextParmas에 담는 parseFormHandler와 JSON 데이터를 해석해서 ContextParmas에 담는 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"}:]

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.