mirror of
https://github.com/labstack/echo.git
synced 2025-01-03 22:52:19 +02:00
commit
6b02099ee6
7
echo.go
7
echo.go
@ -293,7 +293,7 @@ func (e *Echo) add(method, path string, h Handler) {
|
|||||||
// Static serves static files.
|
// Static serves static files.
|
||||||
func (e *Echo) Static(path, root string) {
|
func (e *Echo) Static(path, root string) {
|
||||||
fs := http.StripPrefix(path, http.FileServer(http.Dir(root)))
|
fs := http.StripPrefix(path, http.FileServer(http.Dir(root)))
|
||||||
e.Get(path+"/*", func(c *Context) *HTTPError {
|
e.Get(path+"*", func(c *Context) *HTTPError {
|
||||||
fs.ServeHTTP(c.Response, c.Request)
|
fs.ServeHTTP(c.Response, c.Request)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
@ -312,6 +312,11 @@ func (e *Echo) Index(file string) {
|
|||||||
e.ServeFile("/", file)
|
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) {
|
func (e *Echo) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
c := e.pool.Get().(*Context)
|
c := e.pool.Get().(*Context)
|
||||||
h, echo := e.Router.Find(r.Method, r.URL.Path, c)
|
h, echo := e.Router.Find(r.Method, r.URL.Path, c)
|
||||||
|
11
echo_test.go
11
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) {
|
func TestEchoStatic(t *testing.T) {
|
||||||
e := New()
|
e := New()
|
||||||
e.Static("/scripts", "examples/web/public/scripts")
|
e.Static("/scripts", "examples/web/public/scripts")
|
||||||
|
BIN
examples/web/public/favicon.ico
Executable file
BIN
examples/web/public/favicon.ico
Executable file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
@ -1,11 +1,15 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||||
<title>Echo</title>
|
<title>Echo</title>
|
||||||
|
<link rel="shortcut icon" href="favicon.ico" />
|
||||||
|
<meta name="description" content="">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
Echo!
|
<h1>Echo!</h1>
|
||||||
<script src="/scripts/main.js"></script>
|
<script src="/scripts/main.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -36,8 +36,12 @@ func (t *Template) Render(w io.Writer, name string, data interface{}) *echo.HTTP
|
|||||||
return nil
|
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 {
|
func createUser(c *echo.Context) *echo.HTTPError {
|
||||||
@ -74,15 +78,18 @@ func main() {
|
|||||||
s := stats.New()
|
s := stats.New()
|
||||||
e.Use(s.Handler)
|
e.Use(s.Handler)
|
||||||
// Route
|
// Route
|
||||||
e.Get("/stats", func(c *echo.Context) {
|
e.Get("/stats", func(c *echo.Context) *echo.HTTPError {
|
||||||
c.JSON(http.StatusOK, s.Data())
|
return c.JSON(http.StatusOK, s.Data())
|
||||||
})
|
})
|
||||||
|
|
||||||
// Serve index file
|
// Serve index file
|
||||||
e.Index("public/index.html")
|
e.Index("public/index.html")
|
||||||
|
|
||||||
|
// Serve favicon
|
||||||
|
e.Favicon("public/favicon.ico")
|
||||||
|
|
||||||
// Serve static files
|
// Serve static files
|
||||||
e.Static("/scripts", "public/scripts")
|
e.Static("/scripts/", "public/scripts")
|
||||||
|
|
||||||
//--------
|
//--------
|
||||||
// Routes
|
// Routes
|
||||||
@ -109,19 +116,21 @@ func main() {
|
|||||||
|
|
||||||
// Group with parent middleware
|
// Group with parent middleware
|
||||||
a := e.Group("/admin")
|
a := e.Group("/admin")
|
||||||
a.Use(func(c *echo.Context) {
|
a.Use(func(c *echo.Context) *echo.HTTPError {
|
||||||
// Security middleware
|
// Security middleware
|
||||||
|
return nil
|
||||||
})
|
})
|
||||||
a.Get("", func(c *echo.Context) {
|
a.Get("", func(c *echo.Context) *echo.HTTPError {
|
||||||
c.String(http.StatusOK, "Welcome admin!")
|
return c.String(http.StatusOK, "Welcome admin!")
|
||||||
})
|
})
|
||||||
|
|
||||||
// Group with no parent middleware
|
// 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
|
// Security middleware
|
||||||
|
return nil
|
||||||
})
|
})
|
||||||
g.Get("", func(c *echo.Context) {
|
g.Get("", func(c *echo.Context) *echo.HTTPError {
|
||||||
c.String(http.StatusOK, "Your files!")
|
return c.String(http.StatusOK, "Your files!")
|
||||||
})
|
})
|
||||||
|
|
||||||
// Start server
|
// Start server
|
||||||
|
@ -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{
|
return &node{
|
||||||
typ: t,
|
typ: t,
|
||||||
label: pfx[0],
|
label: pre[0],
|
||||||
prefix: pfx,
|
prefix: pre,
|
||||||
parent: p,
|
parent: p,
|
||||||
children: c,
|
children: c,
|
||||||
handler: h,
|
handler: h,
|
||||||
|
@ -193,18 +193,17 @@ Sends an HTML HTTP response with status code.
|
|||||||
|
|
||||||
### Static files
|
### Static files
|
||||||
|
|
||||||
`echo.Static(path, root string)` serves static files. For example, code below
|
`echo.Static(path, root string)` serves static files. For example, code below serves
|
||||||
serves all files from `public/scripts` directory for any path starting
|
files from directory `public/scripts` for any URL path starting with `/scripts/`.
|
||||||
with `/scripts/`
|
|
||||||
|
|
||||||
```go
|
```go
|
||||||
e.Static("/scripts", "public/scripts")
|
e.Static("/scripts/", "public/scripts")
|
||||||
```
|
```
|
||||||
|
|
||||||
### Serving a file
|
### Serving a file
|
||||||
|
|
||||||
`echo.ServeFile(path, file string)` serves a file. For example, code below serves
|
`echo.ServeFile(path, file string)` serves a file. For example, code below serves
|
||||||
welcome.html for path `/welcome`
|
file `welcome.html` for URL path `/welcome`.
|
||||||
|
|
||||||
```go
|
```go
|
||||||
e.ServeFile("/welcome", "welcome.html")
|
e.ServeFile("/welcome", "welcome.html")
|
||||||
@ -212,13 +211,22 @@ e.ServeFile("/welcome", "welcome.html")
|
|||||||
|
|
||||||
### Serving an index file
|
### Serving an index file
|
||||||
|
|
||||||
`echo.Index(file string)` serves an index file. For example, code below serves
|
`echo.Index(file string)` serves an index file. For example, code below serves file
|
||||||
index.html for path `/`
|
`index.html`.
|
||||||
|
|
||||||
```go
|
```go
|
||||||
e.Index("index.html")
|
e.Index("index.html")
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Serving favicon
|
||||||
|
|
||||||
|
`echo.Favicon(file string)` serves default favicon - `GET /favicon.ico`. For example,
|
||||||
|
code below serves file `favicon.ico`.
|
||||||
|
|
||||||
|
```go
|
||||||
|
e.Index("public/favicon.ico")
|
||||||
|
```
|
||||||
|
|
||||||
## Error Handling
|
## Error Handling
|
||||||
|
|
||||||
Echo advocates centralized HTTP error handling by returning `*echo.HTTPError` from
|
Echo advocates centralized HTTP error handling by returning `*echo.HTTPError` from
|
||||||
|
Loading…
Reference in New Issue
Block a user