diff options
| author | Shulhan <m.shulhan@gmail.com> | 2020-11-27 18:59:36 +0700 |
|---|---|---|
| committer | Shulhan <m.shulhan@gmail.com> | 2020-11-27 18:59:36 +0700 |
| commit | e46ab6bc3b6aed18fd11269a578c7b9614fc2e4b (patch) | |
| tree | f4a90b72641033c549ff5d4b55c369dd3d5ed173 | |
| parent | 0df82da7a8cd0678ed845f2284b7d3f84ba84687 (diff) | |
| download | pakakeh.go-e46ab6bc3b6aed18fd11269a578c7b9614fc2e4b.tar.xz | |
http: add an example on how to write custom HTTP status code
The example show how to use http.ResponseWriter.WriteHeader to write
custom HTTP status code instead of relying on errors.E.
| -rw-r--r-- | lib/http/example_server_test.go | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/lib/http/example_server_test.go b/lib/http/example_server_test.go new file mode 100644 index 00000000..d5b03933 --- /dev/null +++ b/lib/http/example_server_test.go @@ -0,0 +1,69 @@ +package http + +import ( + "encoding/json" + "fmt" + "log" + "net/http" + "time" +) + +func ExampleServer_customHTTPStatusCode() { + type CustomResponse struct { + Status int `json:"status"` + } + exp := CustomResponse{ + Status: http.StatusBadRequest, + } + + opts := &ServerOptions{ + Address: "127.0.0.1:8123", + } + + testServer, err := NewServer(opts) + if err != nil { + log.Fatal(err) + } + + go func() { + err = testServer.Start() + if err != nil { + log.Println(err) + } + }() + + defer testServer.Stop(5 * time.Second) + + epCustom := &Endpoint{ + Path: "/error/custom", + RequestType: RequestTypeJSON, + ResponseType: ResponseTypeJSON, + Call: func(res http.ResponseWriter, req *http.Request, reqBody []byte) ( + resbody []byte, err error, + ) { + res.WriteHeader(exp.Status) + return json.Marshal(exp) + }, + } + + err = testServer.registerPost(epCustom) + if err != nil { + log.Fatal(err) + } + + // Wait for the server fully started. + time.Sleep(1 * time.Second) + + client := NewClient("http://127.0.0.1:8123", nil, false) + + httpRes, resBody, err := client.PostJSON(nil, epCustom.Path, nil) + if err != nil { + log.Fatal(err) + } + + fmt.Printf("%d\n", httpRes.StatusCode) + fmt.Printf("%s\n", resBody) + // Output: + // 400 + // {"status":400} +} |
