mirror of
https://github.com/nlepage/go-wasm-http-server.git
synced 2025-03-10 17:29:10 +00:00
♻️
This commit is contained in:
parent
37bf64f9dc
commit
32e6c6349c
@ -17,6 +17,7 @@ func main() {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res.Header().Add("Content-Type", "application/json")
|
||||||
if err := json.NewEncoder(res).Encode(map[string]string{
|
if err := json.NewEncoder(res).Encode(map[string]string{
|
||||||
"message": fmt.Sprintf("Hello %s! (request n°%d)", params["name"], no),
|
"message": fmt.Sprintf("Hello %s! (request n°%d)", params["name"], no),
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
|
Binary file not shown.
@ -15,6 +15,7 @@ func main() {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res.Header().Add("Content-Type", "application/json")
|
||||||
if err := json.NewEncoder(res).Encode(map[string]string{
|
if err := json.NewEncoder(res).Encode(map[string]string{
|
||||||
"message": fmt.Sprintf("Hello %s!", params["name"]),
|
"message": fmt.Sprintf("Hello %s!", params["name"]),
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
|
Binary file not shown.
@ -3,6 +3,7 @@ package wasmhttp
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
"syscall/js"
|
"syscall/js"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -12,14 +13,11 @@ func Request(r js.Value) (*http.Request, error) {
|
|||||||
body := make([]byte, jsBody.Get("length").Int())
|
body := make([]byte, jsBody.Get("length").Int())
|
||||||
js.CopyBytesToGo(body, jsBody)
|
js.CopyBytesToGo(body, jsBody)
|
||||||
|
|
||||||
req, err := http.NewRequest(
|
req := httptest.NewRequest(
|
||||||
r.Get("method").String(),
|
r.Get("method").String(),
|
||||||
r.Get("url").String(),
|
r.Get("url").String(),
|
||||||
bytes.NewBuffer(body),
|
bytes.NewBuffer(body),
|
||||||
)
|
)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
headersIt := r.Get("headers").Call("entries")
|
headersIt := r.Get("headers").Call("entries")
|
||||||
for {
|
for {
|
||||||
|
49
response_recorder.go
Normal file
49
response_recorder.go
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package wasmhttp
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http/httptest"
|
||||||
|
"syscall/js"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ResponseRecorder extends httptest.ResponseRecorder and implements js.Wrapper
|
||||||
|
type ResponseRecorder struct {
|
||||||
|
*httptest.ResponseRecorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewResponseRecorder returns a new ResponseRecorder
|
||||||
|
func NewResponseRecorder() ResponseRecorder {
|
||||||
|
return ResponseRecorder{httptest.NewRecorder()}
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ js.Wrapper = ResponseRecorder{}
|
||||||
|
|
||||||
|
// JSValue builds and returns the equivalent JS Response (implementing js.Wrapper)
|
||||||
|
func (rr ResponseRecorder) JSValue() js.Value {
|
||||||
|
var res = rr.Result()
|
||||||
|
var init = make(map[string]interface{})
|
||||||
|
|
||||||
|
if res.StatusCode != 0 {
|
||||||
|
init["status"] = res.StatusCode
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(res.Header) != 0 {
|
||||||
|
var headers = make(map[string]interface{}, len(res.Header))
|
||||||
|
for k := range res.Header {
|
||||||
|
headers[k] = res.Header.Get(k)
|
||||||
|
}
|
||||||
|
init["headers"] = headers
|
||||||
|
}
|
||||||
|
|
||||||
|
var body js.Value = js.Undefined()
|
||||||
|
if res.ContentLength != 0 {
|
||||||
|
body = js.Global().Get("Uint8Array").New(res.ContentLength)
|
||||||
|
var b, err = ioutil.ReadAll(res.Body)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
js.CopyBytesToJS(body, b)
|
||||||
|
}
|
||||||
|
|
||||||
|
return js.Global().Get("Response").New(body, init)
|
||||||
|
}
|
@ -1,64 +0,0 @@
|
|||||||
package wasmhttp
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"net/http"
|
|
||||||
"syscall/js"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ResponseWriter implements http.ResponseWriter
|
|
||||||
type ResponseWriter struct {
|
|
||||||
header http.Header
|
|
||||||
buf *bytes.Buffer
|
|
||||||
statusCode int
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewResponseWriter creates a new ResponseWriter
|
|
||||||
func NewResponseWriter() ResponseWriter {
|
|
||||||
return ResponseWriter{
|
|
||||||
header: http.Header{},
|
|
||||||
buf: bytes.NewBuffer(nil),
|
|
||||||
statusCode: 0,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ http.ResponseWriter = ResponseWriter{}
|
|
||||||
|
|
||||||
// Header implements http.ResponseWriter.Header
|
|
||||||
func (rw ResponseWriter) Header() http.Header {
|
|
||||||
return rw.header
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write implements http.ResponseWriter.Write
|
|
||||||
func (rw ResponseWriter) Write(p []byte) (int, error) {
|
|
||||||
return rw.buf.Write(p)
|
|
||||||
}
|
|
||||||
|
|
||||||
// WriteHeader implements http.ResponseWriter.WriteHeader
|
|
||||||
func (rw ResponseWriter) WriteHeader(statusCode int) {
|
|
||||||
rw.statusCode = statusCode
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ js.Wrapper = ResponseWriter{}
|
|
||||||
|
|
||||||
// JSValue builds and returns the equivalent JS Response (implementing js.Wrapper)
|
|
||||||
func (rw ResponseWriter) JSValue() js.Value {
|
|
||||||
init := js.Global().Get("Object").New()
|
|
||||||
|
|
||||||
if rw.statusCode != 0 {
|
|
||||||
init.Set("status", rw.statusCode)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(rw.header) != 0 {
|
|
||||||
headers := make(map[string]interface{}, len(rw.header))
|
|
||||||
for k := range rw.header {
|
|
||||||
headers[k] = rw.header.Get(k)
|
|
||||||
}
|
|
||||||
init.Set("headers", headers)
|
|
||||||
}
|
|
||||||
|
|
||||||
jsBody := js.Global().Get("Uint8Array").New(rw.buf.Len())
|
|
||||||
js.CopyBytesToJS(jsBody, rw.buf.Bytes())
|
|
||||||
|
|
||||||
return js.Global().Get("Response").New(jsBody, init)
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user