-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
334861f
commit 167cbf5
Showing
13 changed files
with
2,261 additions
and
120 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,77 @@ | ||
# Context no Tupã | ||
Você pode acessar o context da requisição a partir da propriedade Context dentro da struct do **Tupa** | ||
|
||
Em breve mais sobre o **Context**. | ||
## Context em Middlewares | ||
|
||
Podemos facilmente adicionar contexto a uma requisição. No Tupâ existem várias formas de se trabalhar com o contexto través do **TupaContext**. Por exemplo você pode colocar um novo context com o método `SetContext()`, que vai colocar o método na requisição. Para obter o valor do contexto, você pode obter o contexto com os métodos `GetCtx()`, `CtxValue(ctx)`. | ||
|
||
* `GetCtx()`: retorna o context inteiro da requisição | ||
* `CtxValue(ctx)`: retorna o contexto específico de acordo com a key especificada | ||
|
||
Vamos adicionar um **Contexto** no middleware *MiddlewareSampleRoute()*. Lembrando que em primeiro lugar é chamado os middlewares especificos de rota, e só então os globais. | ||
|
||
```golang | ||
func main() { | ||
server := tupa.NewAPIServer(":6969") | ||
exampleManager() | ||
server.RegisterRoutes(tupa.GetRoutes()) | ||
server.New() | ||
} | ||
|
||
func exampleManager() { | ||
tupa.AddRoutes(tupa.MiddlewareChain{MiddlewareSampleCats}, SampleRouteManager) | ||
} | ||
|
||
func MiddlewareSampleCats(next tupa.APIFunc) tupa.APIFunc { | ||
return func(tc *tupa.TupaContext) error { | ||
return next(tc) | ||
} | ||
} | ||
|
||
func MiddlewareSampleRoute(next tupa.APIFunc) tupa.APIFunc { | ||
return func(tc *tupa.TupaContext) error { | ||
catsCtxKey := "ctxcats" | ||
ctxMsg := "contexto de alguém interessado em gatos" | ||
newCtx := context.WithValue(tc.Request().Context(), catsCtxKey, ctxMsg) | ||
tc.SetContext(newCtx) | ||
|
||
return next(tc) | ||
} | ||
} | ||
|
||
func SampleRouteManager() []tupa.RouteInfo { | ||
return []tupa.RouteInfo{ | ||
{ | ||
Path: "/cats", | ||
Method: "GET", | ||
Handler: func(tc *tupa.TupaContext) error { | ||
ctxFull := tc.GetCtx() | ||
fmt.Println(ctxFull) | ||
|
||
ctxValue := tc.CtxValue("ctxcats").(string) | ||
fmt.Println(ctxValue) | ||
|
||
ctxVal := tc.GetCtx().Value("ctxcats").(string) | ||
fmt.Println(ctxVal) | ||
|
||
resp, err := http.Get("https://cdn2.thecatapi.com/images/dN6eoeLjY.jpg") | ||
if err != nil { | ||
return err | ||
} | ||
defer resp.Body.Close() | ||
_, err = io.Copy(*tc.Response(), resp.Body) | ||
return err | ||
}, | ||
Middlewares: []tupa.MiddlewareFunc{MiddlewareSampleRoute}, | ||
}, | ||
} | ||
} | ||
|
||
``` | ||
|
||
**output:** | ||
``` | ||
context.Background.WithValue(type *http.contextKey, val <not Stringer>).WithValue(type *http.contextKey, val [::1]:6969).WithCancel.WithCancel.WithValue(type mux.contextKey, val <not Stringer>).WithValue(type mux.contextKey, val <not Stringer>).WithValue(type string, val contexto de alguém interessado em gatos) | ||
contexto de alguém interessado em gatos | ||
contexto de alguém interessado em gatos | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.