generated from templates/go-generic
Dan Anglin
9cb1f8ed4b
- Add a middleware to add an ID for every request for the purpose of cross referencing requests and errors. - Add functions for handling client and server errors.
46 lines
981 B
Go
46 lines
981 B
Go
package server
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"log/slog"
|
|
"net/http"
|
|
)
|
|
|
|
func sendResponse(writer http.ResponseWriter, statusCode int, payload any) {
|
|
data, err := json.Marshal(payload)
|
|
if err != nil {
|
|
sendServerError(
|
|
writer,
|
|
fmt.Errorf("error marshalling the JSON response: %w", err),
|
|
)
|
|
|
|
return
|
|
}
|
|
|
|
writer.Header().Set("Content-Type", "application/json")
|
|
writer.WriteHeader(statusCode)
|
|
_, _ = writer.Write(data)
|
|
}
|
|
|
|
func sendClientError(writer http.ResponseWriter, statusCode int, err error) {
|
|
sendErrorResponse(
|
|
writer,
|
|
statusCode,
|
|
"Client Error: "+err.Error(),
|
|
)
|
|
}
|
|
|
|
func sendServerError(writer http.ResponseWriter, err error) {
|
|
sendErrorResponse(
|
|
writer,
|
|
http.StatusInternalServerError,
|
|
"Server Error: "+err.Error(),
|
|
)
|
|
}
|
|
|
|
func sendErrorResponse(writer http.ResponseWriter, statusCode int, message string) {
|
|
slog.Error(message, "request-id", writer.Header().Get("X-Request-ID"))
|
|
|
|
http.Error(writer, http.StatusText(statusCode), statusCode)
|
|
}
|