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,