diff --git a/echo.go b/echo.go index ed68c824..5a74c0bb 100644 --- a/echo.go +++ b/echo.go @@ -312,6 +312,11 @@ func (e *Echo) Index(file string) { e.ServeFile("/", file) } +// Favicon serves the default favicon - GET /favicon.ico. +func (e *Echo) Favicon(file string) { + e.ServeFile("/favicon.ico", file) +} + func (e *Echo) ServeHTTP(w http.ResponseWriter, r *http.Request) { c := e.pool.Get().(*Context) h, echo := e.Router.Find(r.Method, r.URL.Path, c) diff --git a/echo_test.go b/echo_test.go index 839f0248..0ee49837 100644 --- a/echo_test.go +++ b/echo_test.go @@ -39,6 +39,17 @@ func TestEchoIndex(t *testing.T) { } } +func TestEchoFavicon(t *testing.T) { + e := New() + e.Favicon("examples/web/public/favicon.ico") + w := httptest.NewRecorder() + r, _ := http.NewRequest(GET, "/favicon.ico", nil) + e.ServeHTTP(w, r) + if w.Code != 200 { + t.Errorf("status code should be 200, found %d", w.Code) + } +} + func TestEchoStatic(t *testing.T) { e := New() e.Static("/scripts", "examples/web/public/scripts") diff --git a/examples/web/public/favicon.ico b/examples/web/public/favicon.ico new file mode 100755 index 00000000..d939ddca Binary files /dev/null and b/examples/web/public/favicon.ico differ diff --git a/examples/web/public/index.html b/examples/web/public/index.html index 950f86fb..aed4f466 100644 --- a/examples/web/public/index.html +++ b/examples/web/public/index.html @@ -1,11 +1,15 @@ - + - + + Echo + + + - Echo! - +

Echo!

+ diff --git a/examples/web/server.go b/examples/web/server.go index 7affe32a..a1aaf570 100644 --- a/examples/web/server.go +++ b/examples/web/server.go @@ -36,8 +36,12 @@ func (t *Template) Render(w io.Writer, name string, data interface{}) *echo.HTTP return nil } -func welcome(c *echo.Context) { - c.Render(http.StatusOK, "welcome", "Joe") +//---------- +// Handlers +//---------- + +func welcome(c *echo.Context) *echo.HTTPError { + return c.Render(http.StatusOK, "welcome", "Joe") } func createUser(c *echo.Context) *echo.HTTPError { @@ -74,13 +78,16 @@ func main() { s := stats.New() e.Use(s.Handler) // Route - e.Get("/stats", func(c *echo.Context) { - c.JSON(http.StatusOK, s.Data()) + e.Get("/stats", func(c *echo.Context) *echo.HTTPError { + return c.JSON(http.StatusOK, s.Data()) }) // Serve index file e.Index("public/index.html") + // Serve favicon + e.Favicon("public/favicon.ico") + // Serve static files e.Static("/scripts", "public/scripts") @@ -109,19 +116,21 @@ func main() { // Group with parent middleware a := e.Group("/admin") - a.Use(func(c *echo.Context) { + a.Use(func(c *echo.Context) *echo.HTTPError { // Security middleware + return nil }) - a.Get("", func(c *echo.Context) { - c.String(http.StatusOK, "Welcome admin!") + a.Get("", func(c *echo.Context) *echo.HTTPError { + return c.String(http.StatusOK, "Welcome admin!") }) // Group with no parent middleware - g := e.Group("/files", func(c *echo.Context) { + g := e.Group("/files", func(c *echo.Context) *echo.HTTPError { // Security middleware + return nil }) - g.Get("", func(c *echo.Context) { - c.String(http.StatusOK, "Your files!") + g.Get("", func(c *echo.Context) *echo.HTTPError { + return c.String(http.StatusOK, "Your files!") }) // Start server diff --git a/router.go b/router.go index 7e68c8f9..75f10e47 100644 --- a/router.go +++ b/router.go @@ -137,11 +137,11 @@ func (r *router) insert(method, path string, h HandlerFunc, t ntype, pnames []st } } -func newNode(t ntype, pfx string, p *node, c children, h HandlerFunc, pnames []string, echo *Echo) *node { +func newNode(t ntype, pre string, p *node, c children, h HandlerFunc, pnames []string, echo *Echo) *node { return &node{ typ: t, - label: pfx[0], - prefix: pfx, + label: pre[0], + prefix: pre, parent: p, children: c, handler: h,