mirror of
https://github.com/weloe/token-go.git
synced 2025-10-06 07:56:58 +08:00
66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
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
|
|
}
|