add the route state example in Routing

Gerasimos (Makis) Maropoulos 2019-07-04 01:40:00 +03:00
parent b77bcaf407
commit db83e4a4dc
No known key found for this signature in database
GPG Key ID: F169457BBDA4ACF4

@ -92,6 +92,69 @@ func handler(ctx iris.Context){
} }
``` ```
### Offline Routes
There is one special method in Iris that you can use too. It's called `None` and you can use it to hide a route from outsiders but still able to call it from other route's handlers through the `Context.Exec` method. Each API Handle method returns the Route value back. A Route contains two methods to retrieve the state: `IsOffline()` and `IsOnline()`. You can change the **state** of the route from **offline** to **online** and visa-versa through its `Route.Method` field's value. Of course each change of the router at serve-time requires an `app.RefreshRouter()` call which is safe to use. Take a look below a more complete example:
```go
// file: main.go
package main
import (
"github.com/kataras/iris"
)
func main() {
app := iris.New()
invisibleRoute := app.None("/invisible/{username}", func(ctx iris.Context) {
ctx.Writef("Hello %s with method: %s", ctx.Params().Get("username"), ctx.Method())
if from := ctx.Values().GetString("from"); from != "" {
ctx.Writef("\nI see that you're coming from %s", from)
}
})
app.Get("/change", func(ctx iris.Context) {
if invisibleRoute.IsOnline() {
invisibleRoute.Method = iris.MethodNone
} else {
invisibleRoute.Method = iris.MethodGet
}
// Refresh re-builds the router at serve-time
// in order to be notified for its new routes.
app.RefreshRouter()
})
app.Get("/execute", func(ctx iris.Context) {
// Same as navigating to "http://localhost:8080/invisible/iris"
// when /change has being invoked and route state changed
// from "offline" to "online"
// Values and session can be shared when calling Exec from a "foreign" context.
ctx.Values().Set("from", "/execute")
if invisibleRoute.IsOffline() {
ctx.Exec("NONE", "/invisible/iris")
}else{
// or after "/change":
ctx.Exec("GET", "/invisible/iris")
}
})
app.Run(iris.Addr(":8080"))
}
```
**How to run**
1. `go run main.go`
2. Open a browser at `http://localhost:8080/invisible/iris` and you'll see that you get a `404 not found` error,
3. however the `http://localhost:8080/execute` will be able to execute that route.
4. Now, if you navigate to the `http://localhost:8080/change` and refresh the `/invisible/iris` tab you'll see that you can see it.
## Grouping Routes ## Grouping Routes
A set of routes that are being groupped by path prefix can (optionally) share the same middleware handlers and template layout. A set of routes that are being groupped by path prefix can (optionally) share the same middleware handlers and template layout.
@ -127,6 +190,8 @@ app.PartyFunc("/users", func(users iris.Party) {
}) })
``` ```
## Path Parameters
Unlike other routers you'd seen, the Iris' one can handle various route paths without confliction between them. Unlike other routers you'd seen, the Iris' one can handle various route paths without confliction between them.
Matches only GET "/". Matches only GET "/".