mirror of
https://github.com/labstack/echo.git
synced 2024-11-24 08:22:21 +02:00
Updated website
Signed-off-by: Vishal Rana <vr@labstack.com>
This commit is contained in:
parent
25e72d623e
commit
91e5f755ad
15
README.md
15
README.md
@ -1,5 +1,12 @@
|
||||
|
||||
# **WORK IN PROGRESS!**
|
||||
# *NOTICE*
|
||||
|
||||
- Master branch, website and godoc now points to Echo v2.
|
||||
- It is advisable to migrate to v2. (https://labstack.com/echo/migrating)
|
||||
- Looking for v1?
|
||||
- Installation: Use a package manager (https://github.com/Masterminds/glide, it's nice!) to get stable v1 release/commit or use `go get gopkg.in/labstack/echo.v1`.
|
||||
- Godoc: https://godoc.org/gopkg.in/labstack/echo.v1
|
||||
- Docs: https://github.com/labstack/echo/tree/v1.3/website/content
|
||||
|
||||
# [Echo](http://labstack.com/echo) [![GoDoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](http://godoc.org/github.com/labstack/echo) [![License](http://img.shields.io/badge/license-mit-blue.svg?style=flat-square)](https://raw.githubusercontent.com/labstack/echo/master/LICENSE) [![Build Status](http://img.shields.io/travis/labstack/echo.svg?style=flat-square)](https://travis-ci.org/labstack/echo) [![Coverage Status](http://img.shields.io/coveralls/labstack/echo.svg?style=flat-square)](https://coveralls.io/r/labstack/echo) [![Join the chat at https://gitter.im/labstack/echo](https://img.shields.io/badge/gitter-join%20chat-brightgreen.svg?style=flat-square)](https://gitter.im/labstack/echo)
|
||||
|
||||
@ -12,13 +19,13 @@ import (
|
||||
"github.com/labstack/echo"
|
||||
// "github.com/labstack/echo/engine/fasthttp"
|
||||
"github.com/labstack/echo/engine/standard"
|
||||
mw "github.com/labstack/echo/middleware"
|
||||
"github.com/labstack/echo/middleware"
|
||||
)
|
||||
|
||||
func main() {
|
||||
e := echo.New()
|
||||
e.Use(mw.Logger())
|
||||
e.Use(mw.Recover())
|
||||
e.Use(middleware.Logger())
|
||||
e.Use(middleware.Recover())
|
||||
e.Get("/", echo.HandlerFunc(func(c echo.Context) error {
|
||||
return c.String(200, "Hello, World!")
|
||||
}))
|
||||
|
@ -27,55 +27,80 @@ Enable/disable debug mode.
|
||||
|
||||
### Log prefix
|
||||
|
||||
`echo#SetLogPrefix(prefix string)`
|
||||
`Echo#SetLogPrefix(prefix string)`
|
||||
|
||||
SetLogPrefix sets the prefix for the logger. Default value is `echo`.
|
||||
|
||||
### Log output
|
||||
|
||||
`echo#SetLogOutput(w io.Writer)`
|
||||
`Echo#SetLogOutput(w io.Writer)`
|
||||
|
||||
SetLogOutput sets the output destination for the logger. Default value is `os.Stdout`
|
||||
|
||||
To completely disable logs use `Echo#SetLogOutput(io.Discard)`
|
||||
|
||||
### Log level
|
||||
|
||||
`echo#SetLogLevel(l log.Level)`
|
||||
`Echo#SetLogLevel(l log.Level)`
|
||||
|
||||
SetLogLevel sets the log level for the logger. Default value is `log.ERROR`.
|
||||
|
||||
### Auto index
|
||||
### Engine
|
||||
|
||||
`Echo#AutoIndex(on bool)`
|
||||
|
||||
Enable/disable automatically creating an index page for the directory.
|
||||
|
||||
*Example*
|
||||
#### Standard HTTP server
|
||||
|
||||
```go
|
||||
e := echo.New()
|
||||
e.AutoIndex(true)
|
||||
e.ServerDir("/", "/Users/vr/Projects/echo")
|
||||
e.Run(":1323")
|
||||
e.Run(standard.New(":1323"))
|
||||
```
|
||||
|
||||
Browse to `http://localhost:1323/` to see the directory listing.
|
||||
|
||||
### Hook
|
||||
|
||||
`Echo#Hook(h http.HandlerFunc)`
|
||||
|
||||
Hook registers a callback which is invoked from `Echo#ServerHTTP` as the first
|
||||
statement. Hook is useful if you want to modify response/response objects even
|
||||
before it hits the router or any middleware.
|
||||
|
||||
For example, the following hook strips the trailing slash from the request path.
|
||||
##### From TLS
|
||||
|
||||
```go
|
||||
e.Hook(func(w http.ResponseWriter, r *http.Request) {
|
||||
path := r.URL.Path
|
||||
l := len(path) - 1
|
||||
if path != "/" && path[l] == '/' {
|
||||
r.URL.Path = path[:l]
|
||||
}
|
||||
})
|
||||
e.Run(standard.NewFromTLS(":1323", "<certfile>", "<keyfile>"))
|
||||
```
|
||||
|
||||
##### From config
|
||||
|
||||
```go
|
||||
e.Run(standard.NewFromConfig(&Config{}))
|
||||
```
|
||||
|
||||
#### FastHTTP server
|
||||
|
||||
```go
|
||||
e.Run(fasthttp.New(":1323"))
|
||||
```
|
||||
|
||||
##### From TLS
|
||||
|
||||
```go
|
||||
e.Run(fasthttp.NewFromTLS(":1323", "<certfile>", "<keyfile>"))
|
||||
```
|
||||
|
||||
|
||||
##### From config
|
||||
```go
|
||||
e.Run(fasthttp.NewFromConfig(&Config{}))
|
||||
```
|
||||
|
||||
#### Configuration
|
||||
|
||||
##### `Address`
|
||||
|
||||
Address to bind.
|
||||
|
||||
##### `TLSCertfile`
|
||||
|
||||
TLS certificate file path
|
||||
|
||||
##### `TLSKeyfile`
|
||||
|
||||
TLS key file path
|
||||
|
||||
##### `ReadTimeout`
|
||||
|
||||
HTTP read timeout
|
||||
|
||||
##### `WriteTimeout`
|
||||
|
||||
HTTP write timeout
|
||||
|
@ -34,8 +34,8 @@ BasicAuth middleware provides an HTTP basic authentication.
|
||||
|
||||
```go
|
||||
g := e.Group("/admin")
|
||||
g.Use(mw.BasicAuth(func(usr, pwd string) bool {
|
||||
if usr == "joe" && pwd == "secret" {
|
||||
e.Use(middleware.BasicAuth(func(username, password string) bool {
|
||||
if username == "joe" && password == "secret" {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
@ -61,7 +61,7 @@ control to the centralized
|
||||
*Example*
|
||||
|
||||
```go
|
||||
e.Use(mw.Recover())
|
||||
e.Use(middleware.Recover())
|
||||
```
|
||||
|
||||
### [Recipes](https://github.com/labstack/echo/tree/master/recipes/middleware)
|
||||
### [Recipes](https://github.com/labstack/echox/tree/master/recipe/middleware)
|
||||
|
@ -10,9 +10,11 @@ menu:
|
||||
|
||||
#### Change log
|
||||
|
||||
- Echo now uses `Engine` interface to abstract `HTTP` server implementation, allowing
|
||||
us to use HTTP servers beyond the standard library. It currently supports standard HTTP server and [FastHTTP](https://github.com/valyala/fasthttp).
|
||||
- Good news, 85% of the API remains the same.
|
||||
- `Engine` interface to abstract `HTTP` server implementation, allowing
|
||||
us to use HTTP servers beyond Go standard library. It currently supports standard HTTP server and [FastHTTP](https://github.com/valyala/fasthttp).
|
||||
- Context, Request and Response are converted to interfaces. [More...](https://github.com/labstack/echo/issues/146)
|
||||
- Handler signature is changed to `func (c echo.Context) error`.
|
||||
- Moved API's for serving static files into middleware.
|
||||
- `Echo#Index`
|
||||
- `Echo#Favicon`
|
||||
@ -22,10 +24,12 @@ us to use HTTP servers beyond the standard library. It currently supports standa
|
||||
- Dropped auto wrapping of handler and middleware to enforce compile time check.
|
||||
- Handler only accepts `Echo#Handler` interface.
|
||||
- Middleware only accepts `Echo#Middleware` interface.
|
||||
- `Echo#HandlerFunc` adapter to use of ordinary functions as handlers.
|
||||
- `Echo#MiddlewareFunc` adapter to use of ordinary functions as middleware.
|
||||
- `Echo#HandlerFunc` adapter to use ordinary functions as handlers.
|
||||
- `Echo#MiddlewareFunc` adapter to use ordinary functions as middleware.
|
||||
- Middleware is run before hitting the router, which doesn't require `Echo#Hook` API as
|
||||
it can be achieved via middleware.
|
||||
- Ability to define middleware at route level.
|
||||
|
||||
#### How?
|
||||
|
||||
Quite easy, browse through [recipes](/recipes/hello-world) freshly converted to v2.
|
||||
|
@ -8,9 +8,8 @@ menu:
|
||||
|
||||
### Template
|
||||
|
||||
```go
|
||||
Context.Render(code int, name string, data interface{}) error
|
||||
```
|
||||
`Context#Render(code int, name string, data interface{}) error`
|
||||
|
||||
Renders a template with data and sends a text/html response with status code. Templates
|
||||
can be registered using `Echo.SetRenderer()`, allowing us to use any template engine.
|
||||
|
||||
@ -23,7 +22,7 @@ type Template struct {
|
||||
templates *template.Template
|
||||
}
|
||||
|
||||
func (t *Template) Render(w io.Writer, name string, data interface{}) error {
|
||||
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
|
||||
return t.templates.ExecuteTemplate(w, name, data)
|
||||
}
|
||||
```
|
||||
@ -60,87 +59,43 @@ func Hello(c echo.Context) error {
|
||||
|
||||
### JSON
|
||||
|
||||
```go
|
||||
Context.JSON(code int, v interface{}) error
|
||||
```
|
||||
`Context.JSON(code int, v interface{}) error`
|
||||
|
||||
Sends a JSON HTTP response with status code.
|
||||
|
||||
### JSONP
|
||||
|
||||
```go
|
||||
Context.JSONP(code int, callback string, i interface{}) error
|
||||
```
|
||||
`Context.JSONP(code int, callback string, i interface{}) error`
|
||||
|
||||
Sends a JSONP HTTP response with status code. It uses `callback` to construct the
|
||||
JSONP payload.
|
||||
|
||||
### XML
|
||||
|
||||
```go
|
||||
Context.XML(code int, v interface{}) error
|
||||
```
|
||||
`Context.XML(code int, v interface{}) error`
|
||||
|
||||
Sends an XML HTTP response with status code.
|
||||
|
||||
### HTML
|
||||
|
||||
```go
|
||||
Context.HTML(code int, html string) error
|
||||
```
|
||||
`c.HTML(code int, html string) error`
|
||||
|
||||
Sends an HTML response with status code.
|
||||
|
||||
### String
|
||||
|
||||
```go
|
||||
Context.String(code int, s string) error
|
||||
```
|
||||
`Context#String(code int, s string) error`
|
||||
|
||||
Sends a string response with status code.
|
||||
|
||||
### File
|
||||
### Attachment
|
||||
|
||||
```go
|
||||
Context.File(path, name string, attachment bool) error
|
||||
```
|
||||
`Context#Attachment(file string) (err error)`
|
||||
|
||||
File sends a response with the content of the file. If `attachment` is set
|
||||
to `true`, the client is prompted to save the file with provided `name`,
|
||||
name can be empty, in that case name of the file is used.
|
||||
Sends file as an attachment.
|
||||
|
||||
### Static files
|
||||
|
||||
`Echo.Static(path, root string)` serves static files. For example, code below serves
|
||||
files from directory `public/scripts` for any request path starting with `/scripts/`.
|
||||
`Echo#Use(middleware.Static("public"))`
|
||||
|
||||
```go
|
||||
e.Static("/scripts/", "public/scripts")
|
||||
```
|
||||
|
||||
### Serving a file
|
||||
|
||||
`Echo.ServeFile(path, file string)` serves a file. For example, code below serves
|
||||
file `welcome.html` for request path `/welcome`.
|
||||
|
||||
```go
|
||||
e.ServeFile("/welcome", "welcome.html")
|
||||
```
|
||||
|
||||
### Serving an index file
|
||||
|
||||
`Echo.Index(file string)` serves root index page - `GET /`. For example, code below
|
||||
serves root index page from file `public/index.html`.
|
||||
|
||||
```go
|
||||
e.Index("public/index.html")
|
||||
```
|
||||
|
||||
### Serving favicon
|
||||
|
||||
`Echo.Favicon(file string)` serves default favicon - `GET /favicon.ico`. For example,
|
||||
code below serves favicon from file `public/favicon.ico`.
|
||||
|
||||
```go
|
||||
e.Favicon("public/favicon.ico")
|
||||
```
|
||||
Serves static files from public folder.
|
||||
|
@ -22,12 +22,10 @@ e.Get("/hello", func(c echo.Context) error {
|
||||
```
|
||||
|
||||
You can use `Echo.Any(path string, h Handler)` to register a handler for all HTTP methods.
|
||||
To register it for some methods, use `Echo.Match(methods []string, path string, h Handler)`.
|
||||
If you want to register it for some methods use `Echo.Match(methods []string, path string, h Handler)`.
|
||||
|
||||
|
||||
Echo's default handler is `func(*echo.Context) error` where `echo.Context` primarily
|
||||
holds HTTP request and response objects. Echo also has a support for other types
|
||||
of handlers.
|
||||
Echo defines handler function as `func(echo.Context) error` where `echo.Context` primarily
|
||||
holds HTTP request and response interfaces.
|
||||
|
||||
### Match-any
|
||||
|
||||
@ -71,20 +69,20 @@ Above routes would resolve in the following order:
|
||||
|
||||
### Group
|
||||
|
||||
`Echo.Group(prefix string, m ...Middleware) *Group`
|
||||
`Echo#Group(prefix string, m ...Middleware) *Group`
|
||||
|
||||
Routes with common prefix can be grouped to define a new sub-router with optional
|
||||
middleware. If middleware is passed to the function, it overrides parent middleware
|
||||
- helpful if you want a completely new middleware stack for the group. To add middleware
|
||||
later you can use `Group.Use(m ...Middleware)`. Groups can also be nested.
|
||||
middleware. In addition to specified middleware group also inherits parent middleware.
|
||||
To add middleware later in the group you can use `Group.Use(m ...Middleware)`.
|
||||
Groups can also be nested.
|
||||
|
||||
In the code below, we create an admin group which requires basic HTTP authentication
|
||||
for routes `/admin/*`.
|
||||
|
||||
```go
|
||||
e.Group("/admin")
|
||||
e.Use(mw.BasicAuth(func(usr, pwd string) bool {
|
||||
if usr == "joe" && pwd == "secret" {
|
||||
e.Use(middleware.BasicAuth(func(username, password string) bool {
|
||||
if username == "joe" && password == "secret" {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
@ -11,41 +11,12 @@ A fast and unfancy micro web framework for Go.
|
||||
## Features
|
||||
|
||||
- Fast HTTP router which smartly prioritize routes.
|
||||
- Extensible middleware, supports:
|
||||
- `echo.MiddlewareFunc`
|
||||
- `func(echo.HandlerFunc) echo.HandlerFunc`
|
||||
- `echo.HandlerFunc`
|
||||
- `func(*echo.Context) error`
|
||||
- `func(http.Handler) http.Handler`
|
||||
- `http.Handler`
|
||||
- `http.HandlerFunc`
|
||||
- `func(http.ResponseWriter, *http.Request)`
|
||||
- Extensible handler, supports:
|
||||
- `echo.HandlerFunc`
|
||||
- `func(*echo.Context) error`
|
||||
- `http.Handler`
|
||||
- `http.HandlerFunc`
|
||||
- `func(http.ResponseWriter, *http.Request)`
|
||||
- Sub-router/Groups
|
||||
- Handy functions to send variety of HTTP response:
|
||||
- HTML
|
||||
- HTML via templates
|
||||
- String
|
||||
- JSON
|
||||
- JSONP
|
||||
- XML
|
||||
- File
|
||||
- NoContent
|
||||
- Redirect
|
||||
- Error
|
||||
- Build-in support for:
|
||||
- Favicon
|
||||
- Index file
|
||||
- Static files
|
||||
- WebSocket
|
||||
- Run with standard HTTP server or FastHTTP server.
|
||||
- Extensible middleware framework.
|
||||
- Router groups with nesting.
|
||||
- Handy functions to send variety of HTTP responses.
|
||||
- Centralized HTTP error handling.
|
||||
- Customizable HTTP request binding function.
|
||||
- Customizable HTTP response rendering function, allowing you to use any HTML template engine.
|
||||
- Template rendering with any template engine.
|
||||
|
||||
## Performance
|
||||
|
||||
@ -61,7 +32,7 @@ $ go get github.com/labstack/echo
|
||||
|
||||
### Hello, World!
|
||||
|
||||
Create `server.go`
|
||||
Create `main.go`
|
||||
|
||||
```go
|
||||
package main
|
||||
@ -70,12 +41,15 @@ import (
|
||||
"net/http"
|
||||
|
||||
"github.com/labstack/echo"
|
||||
mw "github.com/labstack/echo/middleware"
|
||||
"github.com/labstack/echo/engine/standard"
|
||||
"github.com/labstack/echo/middleware"
|
||||
)
|
||||
|
||||
// Handler
|
||||
func hello(c echo.Context) error {
|
||||
return c.String(http.StatusOK, "Hello, World!\n")
|
||||
func hello() echo.HandlerFunc {
|
||||
return func(c echo.Context) error {
|
||||
return c.String(http.StatusOK, "Hello, World!\n")
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
@ -83,29 +57,29 @@ func main() {
|
||||
e := echo.New()
|
||||
|
||||
// Middleware
|
||||
e.Use(mw.Logger())
|
||||
e.Use(mw.Recover())
|
||||
e.Use(middleware.Logger())
|
||||
e.Use(middleware.Recover())
|
||||
|
||||
// Routes
|
||||
e.Get("/", hello)
|
||||
e.Get("/", hello())
|
||||
|
||||
// Start server
|
||||
e.Run(":1323")
|
||||
e.Run(standard.New(":1323"))
|
||||
}
|
||||
```
|
||||
|
||||
Start server
|
||||
|
||||
```sh
|
||||
$ go run server.go
|
||||
$ go run main.go
|
||||
```
|
||||
|
||||
Browse to [http://localhost:1323](http://localhost:1323) and you should see
|
||||
Hello, World! on the page.
|
||||
|
||||
### Next?
|
||||
- Browse [recipes](https://github.com/labstack/echo/tree/master/recipes)
|
||||
- Head over to [guide]({{< relref "guide/installation.md" >}})
|
||||
- Browse [recipes](/recipes/hello-world)
|
||||
- Head over to [guide](/guide/installation")
|
||||
|
||||
## Contribute
|
||||
|
||||
|
19
website/content/recipes/cors.md
Normal file
19
website/content/recipes/cors.md
Normal file
@ -0,0 +1,19 @@
|
||||
---
|
||||
title: CORS
|
||||
menu:
|
||||
side:
|
||||
parent: recipes
|
||||
weight: 3
|
||||
---
|
||||
|
||||
### Server
|
||||
|
||||
`main.go`
|
||||
|
||||
{{< embed "cors/main.go" >}}
|
||||
|
||||
### Maintainers
|
||||
|
||||
- [vishr](https://github.com/vishr)
|
||||
|
||||
### [Source Code]({{< source "cors" >}})
|
@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Google App Engine
|
||||
draft: true
|
||||
menu:
|
||||
side:
|
||||
parent: recipes
|
||||
|
@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Website
|
||||
draft: true
|
||||
menu:
|
||||
side:
|
||||
parent: recipes
|
||||
|
@ -1,6 +1,6 @@
|
||||
<header class="mdl-layout__header">
|
||||
<div class="mdl-layout__header-row">
|
||||
<a href="https://labstack.com" class="mdl-navigation__link mdl-layout-title">
|
||||
<a href="{{ .Site.BaseURL }}" class="mdl-navigation__link mdl-layout-title">
|
||||
<img src="/images/logo.svg" alt="LabStack">
|
||||
</a>
|
||||
<div class="mdl-layout-spacer"></div>
|
||||
|
@ -1,3 +1,6 @@
|
||||
body, p, ol, ul {
|
||||
font-size: 16px;
|
||||
}
|
||||
footer {
|
||||
background-color: inherit !important;
|
||||
border-top: 2px solid #e0e0e0;
|
||||
|
Loading…
Reference in New Issue
Block a user