-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
Description
Here's an small example where an interceptor is called, but the value set by the interceptor is not visible for a template function. (running on http://localhost:8089)
package main
import (
"fmt"
"html/template"
"net"
"net/http"
"github.com/registrobr/trama"
)
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
func main() {
mux := trama.New(nil)
mux.RegisterPage("/", func() trama.WebHandler {
return new(test)
})
if err := mux.ParseTemplates(); err != nil {
fmt.Println(err)
return
}
ln, err := net.Listen("tcp", "127.0.0.1:8089")
if err != nil {
fmt.Printf("Error listening to interface. Details: %s\n", err)
return
}
server := http.Server{
Handler: mux,
}
panic(server.Serve(ln))
}
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
type test struct {
trama.DefaultWebHandler
testerCompliant
}
func (t *test) Get(response trama.Response, r *http.Request) error {
response.SetTemplateGroup("en")
response.ExecuteTemplate("test.html", nil)
return nil
}
func (t *test) Templates() trama.TemplateGroupSet {
groupSet := trama.NewTemplateGroupSet(template.FuncMap{
"test": func() string {
return t.Message()
},
})
groupSet.Insert(trama.TemplateGroup{
Name: "en",
Files: []string{"test.html"},
})
return groupSet
}
func (t *test) Interceptors() trama.WebInterceptorChain {
return trama.NewWebInterceptorChain(
newTestInterceptor(t),
)
}
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
type tester interface {
SetMessage(msg string)
Message() string
}
type testInterceptor struct {
trama.NopWebInterceptor
handler tester
}
func newTestInterceptor(h tester) *testInterceptor {
return &testInterceptor{handler: h}
}
func (t testInterceptor) Before(response trama.Response, r *http.Request) error {
t.handler.SetMessage("This is a test message!")
return nil
}
type testerCompliant struct {
msg string
}
func (t *testerCompliant) SetMessage(msg string) {
t.msg = msg
}
func (t testerCompliant) Message() string {
return t.msg
}You should have a file named "test.html" in the same folder where you are running the program, the content of this file should be:
<!DOCTYPE html>
<html lang="en">
<body>
<h1>Expected: “This is a test message!”</h1>
<h1>Got: “{{test}}”</h1>
</body>
</html>Reactions are currently unavailable