빠른 참고: JWT 인증에 대한 이전 게시물을 확인하고 일부 렌더링 문제를 발견했다면 이제 문제가 해결되었습니다! 이 예제는 해당 튜토리얼을 기반으로 구축되었으므로 다시 한 번 살펴보시기 바랍니다. :)
자, 여러분, Go API를 실행하고 JWT 인증을 추가했으며 이를 PostgreSQL 데이터베이스에 연결했습니다. 하지만 아직 끝나지 않았습니다! 이번 주에는 로깅 및 더 스마트하게 개발자 친화적으로 만들 예정입니다. >오류 처리.
미들웨어란 무엇인가? ?오늘 우리는 다음과 같은 미들웨어를 구축할 것입니다.
func loggingMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { start := time.Now() // Log the method and the requested URL log.Printf("Started %s %s", r.Method, r.URL.Path) // Call the next handler in the chain next.ServeHTTP(w, r) // Log how long it took log.Printf("Completed in %v", time.Since(start)) }) }
2단계: 미들웨어 오류 처리?
func errorHandlingMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { defer func() { if err := recover(); err != nil { // Log the error and send a user-friendly message log.Printf("Error occurred: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) } }() next.ServeHTTP(w, r) }) }
func main() { db = connectDB() defer db.Close() r := mux.NewRouter() // Apply middleware globally r.Use(loggingMiddleware) r.Use(errorHandlingMiddleware) r.HandleFunc("/login", login).Methods("POST") r.Handle("/books", authenticate(http.HandlerFunc(getBooks))).Methods("GET") r.Handle("/books", authenticate(http.HandlerFunc(createBook))).Methods("POST") fmt.Println("Server started on port :8000") log.Fatal(http.ListenAndServe(":8000", r)) }
go run main.go
Started GET /books Completed in 1.2ms
Error occurred: some error details
로깅은 버그를 추적하고 API 동작을 모니터링하는 데 도움이 됩니다. 문제가 발생하면 정확히 어느 엔드포인트에 도달했는지, 요청에 걸린 시간은 얼마나 되는지 알 수 있습니다.
오류 처리는 예상치 못한 일이 발생했을 때 API가 충돌하는 것을 방지합니다. 대신 정상적으로 복구되어 클라이언트에 깨끗한 오류 메시지를 보냅니다.
Go API를 Docker화하겠습니다! 이렇게 하면 앱을 이식할 수 있고 모든 컴퓨터나 클라우드 서비스에 배포할 수 있습니다. 컨테이너의 마법을 경험해보세요! ?
위 내용은 Go API에 로깅 및 오류 처리 미들웨어 추가의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!