feat: add web context and add go net/http web context

This commit is contained in:
weloe
2023-05-02 15:06:54 +08:00
parent 35c206716d
commit c04ab085b4
14 changed files with 1024 additions and 1 deletions

View File

@@ -0,0 +1,65 @@
package go_http_context
import (
"encoding/json"
"github.com/weloe/token-go/ctx"
"net/http"
)
var _ ctx.Response = (*HttpResponse)(nil)
type HttpResponse struct {
*ctx.DefaultRespImplement
req *http.Request
writer http.ResponseWriter
}
func NewResponse(req *http.Request, writer http.ResponseWriter) *HttpResponse {
return &HttpResponse{
DefaultRespImplement: &ctx.DefaultRespImplement{},
req: req,
writer: writer,
}
}
func (r *HttpResponse) Source() interface{} {
return r.writer
}
func (r *HttpResponse) SetHeader(name string, value string) {
r.writer.Header().Set(name, value)
}
func (r *HttpResponse) AddHeader(name string, value string) {
r.writer.Header().Add(name, value)
}
func (r *HttpResponse) Redirect(url string) {
http.Redirect(r.writer, r.req, url, http.StatusTemporaryRedirect)
}
func (r *HttpResponse) Status(status int) {
r.writer.WriteHeader(status)
}
// JSON response json data
func (r *HttpResponse) JSON(code int, obj interface{}) {
r.SetHeader("Content-Type", "application/json")
r.Status(code)
encoder := json.NewEncoder(r.writer)
if err := encoder.Encode(obj); err != nil {
http.Error(r.writer, err.Error(), 500)
}
}
// HTML response .html
func (r *HttpResponse) HTML(code int, html string) error {
r.SetHeader("Content-Type", "text/html")
r.Status(code)
_, err := r.writer.Write([]byte(html))
if err != nil {
return err
}
return nil
}