コード例 #1
0
ファイル: filter.go プロジェクト: sunfmin/streamango
func FilteredFunc(stack *mango.Stack, streamer http.HandlerFunc, filter BodyFilter) http.HandlerFunc {
	compiled_app := stack.Compile(streamerapp(streamer))
	return func(w http.ResponseWriter, r *http.Request) {
		env := make(map[string]interface{})
		env["mango.request"] = &mango.Request{r}
		env["mango.bodyfilter"] = filter
		env["mango.writer"] = w

		status, headers, body := compiled_app(env)
		_, streaming := env["streamango.streaming"]
		// streaming, so don't need to do
		if streaming {
			return
		}

		for key, values := range headers {
			for _, value := range values {
				w.Header().Add(key, value)
			}
		}
		w.WriteHeader(int(status))
		w.Write([]byte(body))
	}
}