mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 18:51:03 +01:00
f6905a3f79
Read HISTORY.md
110 lines
2.6 KiB
Go
110 lines
2.6 KiB
Go
// Package main shows how you can share a
|
|
// function between handlers of the same chain.
|
|
// Note that, this case is very rarely used and it exists,
|
|
// mostly, for 3rd-party middleware creators.
|
|
//
|
|
// The middleware creator registers a dynamic function by Context.SetFunc and
|
|
// the route handler just needs to call Context.CallFunc(funcName, arguments),
|
|
// without knowning what is the specific middleware's implementation or who was the creator
|
|
// of that function, it may be a basicauth middleware's logout or session's logout.
|
|
//
|
|
// See Context.SetLogoutFunc and Context.Logout methods too (these are not covered here).
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/kataras/iris/v12"
|
|
)
|
|
|
|
func main() {
|
|
app := newApp()
|
|
|
|
// GET: http://localhost:8080
|
|
app.Listen(":8080")
|
|
}
|
|
|
|
func newApp() *iris.Application {
|
|
app := iris.New()
|
|
app.Use(middleware)
|
|
// OR app.UseRouter(middleware)
|
|
// to register it everywhere,
|
|
// including the HTTP errors.
|
|
|
|
app.Get("/", handler)
|
|
app.Get("/2", middleware2, handler2)
|
|
app.Get("/3", middleware3, handler3)
|
|
|
|
return app
|
|
}
|
|
|
|
// Assume: this is a middleware which does not export
|
|
// the 'hello' function for several reasons
|
|
// but we offer a 'greeting' optional feature to the route handler.
|
|
func middleware(ctx iris.Context) {
|
|
ctx.SetFunc("greet", hello)
|
|
ctx.Next()
|
|
}
|
|
|
|
// Assume: this is a handler which needs to "greet" the client but
|
|
// the function for that job is not predictable,
|
|
// it may change - dynamically (SetFunc) - depending on
|
|
// the middlewares registered before this route handler.
|
|
// E.g. it may be a "Hello $name" or "Greetings $Name".
|
|
func handler(ctx iris.Context) {
|
|
outputs, err := ctx.CallFunc("greet", "Gophers")
|
|
if err != nil {
|
|
ctx.StopWithError(iris.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
response := outputs[0].Interface().(string)
|
|
ctx.WriteString(response)
|
|
}
|
|
|
|
func middleware2(ctx iris.Context) {
|
|
ctx.SetFunc("greet", sayHello)
|
|
ctx.Next()
|
|
}
|
|
|
|
func handler2(ctx iris.Context) {
|
|
_, err := ctx.CallFunc("greet", "Gophers [2]")
|
|
if err != nil {
|
|
ctx.StopWithError(iris.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func middleware3(ctx iris.Context) {
|
|
ctx.SetFunc("job", function3)
|
|
ctx.Next()
|
|
}
|
|
|
|
func handler3(ctx iris.Context) {
|
|
_, err := ctx.CallFunc("job")
|
|
if err != nil {
|
|
ctx.StopWithError(iris.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
ctx.WriteString("OK, job was executed.\nSee the command prompt.")
|
|
}
|
|
|
|
/*
|
|
| ------------------------ |
|
|
| function implementations |
|
|
| ------------------------ |
|
|
*/
|
|
|
|
func hello(name string) string {
|
|
return fmt.Sprintf("Hello, %s!", name)
|
|
}
|
|
|
|
func sayHello(ctx iris.Context, name string) {
|
|
ctx.WriteString(hello(name))
|
|
}
|
|
|
|
func function3() {
|
|
fmt.Printf("function3 called\n")
|
|
}
|