mirror of
https://github.com/labstack/echo.git
synced 2024-12-24 20:14:31 +02:00
updated recipes
Signed-off-by: Vishal Rana <vr@labstack.com>
This commit is contained in:
parent
edd558a5ca
commit
093e5c9ed6
20
echo.go
20
echo.go
@ -30,7 +30,9 @@ Example:
|
||||
e.GET("/", hello)
|
||||
|
||||
// Start server
|
||||
e.Logger.Fatal(e.Start(":1323"))
|
||||
if err := e.Start(":1323"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
Learn more at https://echo.labstack.com
|
||||
@ -53,8 +55,6 @@ import (
|
||||
|
||||
"github.com/rsc/letsencrypt"
|
||||
|
||||
"golang.org/x/net/websocket"
|
||||
|
||||
"github.com/labstack/gommon/color"
|
||||
glog "github.com/labstack/gommon/log"
|
||||
"github.com/tylerb/graceful"
|
||||
@ -396,20 +396,6 @@ func (e *Echo) File(path, file string) {
|
||||
})
|
||||
}
|
||||
|
||||
// WebSocket registers a new WebSocket route for a path with matching handler in
|
||||
// the router with optional route-level middleware.
|
||||
func (e *Echo) WebSocket(path string, h HandlerFunc, m ...MiddlewareFunc) {
|
||||
e.GET(path, func(c Context) (err error) {
|
||||
websocket.Handler(func(ws *websocket.Conn) {
|
||||
defer ws.Close()
|
||||
c.SetWebSocket(ws)
|
||||
c.Response().Status = http.StatusSwitchingProtocols
|
||||
err = h(c)
|
||||
}).ServeHTTP(c.Response(), c.Request())
|
||||
return
|
||||
}, m...)
|
||||
}
|
||||
|
||||
func (e *Echo) add(method, path string, handler HandlerFunc, middleware ...MiddlewareFunc) {
|
||||
name := handlerName(handler)
|
||||
e.router.Add(method, path, func(c Context) error {
|
||||
|
24
echo_test.go
24
echo_test.go
@ -2,14 +2,11 @@ package echo
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"golang.org/x/net/websocket"
|
||||
|
||||
"reflect"
|
||||
"strings"
|
||||
|
||||
@ -250,27 +247,6 @@ func TestEchoMatch(t *testing.T) { // JFC
|
||||
})
|
||||
}
|
||||
|
||||
func TestEchoWebSocket(t *testing.T) {
|
||||
e := New()
|
||||
e.WebSocket("/ws", func(c Context) error {
|
||||
c.WebSocket().Write([]byte("test"))
|
||||
return nil
|
||||
})
|
||||
srv := httptest.NewServer(e)
|
||||
defer srv.Close()
|
||||
addr := srv.Listener.Addr().String()
|
||||
origin := "http://localhost"
|
||||
url := fmt.Sprintf("ws://%s/ws", addr)
|
||||
ws, err := websocket.Dial(url, "", origin)
|
||||
if assert.NoError(t, err) {
|
||||
ws.Write([]byte("test\n"))
|
||||
defer ws.Close()
|
||||
buf := new(bytes.Buffer)
|
||||
buf.ReadFrom(ws)
|
||||
assert.Equal(t, "test", buf.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestEchoURL(t *testing.T) {
|
||||
e := New()
|
||||
static := func(Context) error { return nil }
|
||||
|
6
glide.lock
generated
6
glide.lock
generated
@ -1,5 +1,5 @@
|
||||
hash: 68fa89887f232f6f139552d50300f5fe9f958da390045b9b99d4f7d0201f42f7
|
||||
updated: 2016-10-20T11:50:22.171643207-07:00
|
||||
hash: b592629b56c43e0f6fcef629a3e46106b07431120d42ed45952d841655407e3e
|
||||
updated: 2016-10-20T16:35:55.384756891-07:00
|
||||
imports:
|
||||
- name: github.com/daaku/go.zipexe
|
||||
version: a5fe2436ffcb3236e175e5149162b41cd28bd27d
|
||||
@ -13,6 +13,8 @@ imports:
|
||||
version: 98fa357170587e470c5f27d3c3ea0947b71eb455
|
||||
subpackages:
|
||||
- proto
|
||||
- name: github.com/gorilla/websocket
|
||||
version: 460e0a996e9004dce40c3697e5ed4d7bc5a69b93
|
||||
- name: github.com/kardianos/osext
|
||||
version: c2c54e542fb797ad986b31721e1baedf214ca413
|
||||
- name: github.com/labstack/gommon
|
||||
|
@ -16,6 +16,7 @@ import:
|
||||
subpackages:
|
||||
- websocket
|
||||
- package: google.golang.org/appengine
|
||||
- package: github.com/gorilla/websocket
|
||||
testImport:
|
||||
- package: github.com/stretchr/testify
|
||||
subpackages:
|
||||
|
@ -33,5 +33,8 @@ func main() {
|
||||
}))
|
||||
|
||||
e.GET("/api/users", getUsers)
|
||||
e.Logger.Fatal(e.Start(":1323"))
|
||||
|
||||
if err := e.Start(":1323"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
@ -71,5 +71,7 @@ func main() {
|
||||
e.DELETE("/users/:id", deleteUser)
|
||||
|
||||
// Start server
|
||||
e.Logger.Fatal(e.Start(":1323"))
|
||||
if err := e.Start(":1323"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
@ -17,5 +17,7 @@ func main() {
|
||||
// servers other static files
|
||||
e.GET("/static/*", echo.WrapHandler(http.StripPrefix("/static/", assetHandler)))
|
||||
|
||||
e.Logger.Fatal(e.Start(":3000"))
|
||||
if err := e.Start(":1323"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
@ -61,5 +61,7 @@ func main() {
|
||||
|
||||
e.POST("/upload", upload)
|
||||
|
||||
e.Logger.Fatal(e.Start(":1323"))
|
||||
if err := e.Start(":1323"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
@ -55,5 +55,7 @@ func main() {
|
||||
|
||||
e.POST("/upload", upload)
|
||||
|
||||
e.Logger.Fatal(e.Start(":1323"))
|
||||
if err := e.Start(":1323"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
@ -20,5 +20,7 @@ func createMux() *echo.Echo {
|
||||
}
|
||||
|
||||
func main() {
|
||||
e.Logger.Fatal(e.Start(":8080"))
|
||||
if err := e.Start(":8080"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
@ -21,5 +21,7 @@ func main() {
|
||||
})
|
||||
|
||||
// Start server
|
||||
e.Logger.Fatal(e.Start(":1323"))
|
||||
if err := e.Start(":1323"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
@ -38,5 +38,7 @@ func main() {
|
||||
e := echo.New()
|
||||
e.GET("/request", request)
|
||||
e.GET("/stream", stream)
|
||||
e.Logger.Fatal(e.StartTLS(":1323", "cert.pem", "key.pem"))
|
||||
if err := e.StartTLS(":1323", "cert.pem", "key.pem"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
@ -30,5 +30,7 @@ func main() {
|
||||
})
|
||||
|
||||
// Start server
|
||||
e.Logger.Fatal(e.Start(":1323"))
|
||||
if err := e.Start(":1323"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
@ -82,5 +82,7 @@ func main() {
|
||||
r.Use(middleware.JWTWithConfig(config))
|
||||
r.GET("", restricted)
|
||||
|
||||
e.Logger.Fatal(e.Start(":1323"))
|
||||
if err := e.Start(":1323"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
@ -65,5 +65,7 @@ func main() {
|
||||
r.Use(middleware.JWT([]byte("secret")))
|
||||
r.GET("", restricted)
|
||||
|
||||
e.Logger.Fatal(e.Start(":1323"))
|
||||
if err := e.Start(":1323"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
@ -78,5 +78,7 @@ func main() {
|
||||
})
|
||||
|
||||
// Start server
|
||||
e.Logger.Fatal(e.Start(":1323"))
|
||||
if err := e.Start(":1323"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
@ -41,5 +41,7 @@ func main() {
|
||||
}
|
||||
return nil
|
||||
})
|
||||
e.Logger.Fatal((e.Start(":1323")))
|
||||
if err := e.Start(":1323"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
@ -74,5 +74,7 @@ func main() {
|
||||
|
||||
return
|
||||
})
|
||||
e.Logger.Fatal(e.Start(":1323"))
|
||||
if err := e.Start(":1323"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
49
recipe/websocket/gorilla/server.go
Normal file
49
recipe/websocket/gorilla/server.go
Normal file
@ -0,0 +1,49 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/labstack/echo"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/labstack/echo/middleware"
|
||||
)
|
||||
|
||||
var (
|
||||
upgrader = websocket.Upgrader{}
|
||||
)
|
||||
|
||||
func hello(c echo.Context) error {
|
||||
ws, err := upgrader.Upgrade(c.Response(), c.Request(), nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer ws.Close()
|
||||
|
||||
for {
|
||||
// Write
|
||||
err := ws.WriteMessage(websocket.TextMessage, []byte("Hello, Client!"))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// Read
|
||||
_, msg, err := ws.ReadMessage()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
fmt.Printf("%s\n", msg)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
e := echo.New()
|
||||
e.Use(middleware.Logger())
|
||||
e.Use(middleware.Recover())
|
||||
e.Use(middleware.Static("../public"))
|
||||
e.GET("/ws", hello)
|
||||
if err := e.Start(":1323"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
43
recipe/websocket/net/server.go
Normal file
43
recipe/websocket/net/server.go
Normal file
@ -0,0 +1,43 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/labstack/echo"
|
||||
"github.com/labstack/echo/middleware"
|
||||
"golang.org/x/net/websocket"
|
||||
)
|
||||
|
||||
func hello(c echo.Context) error {
|
||||
websocket.Handler(func(ws *websocket.Conn) {
|
||||
defer ws.Close()
|
||||
for {
|
||||
// Write
|
||||
err := websocket.Message.Send(ws, "Hello, Client!")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// Read
|
||||
msg := ""
|
||||
err = websocket.Message.Receive(ws, &msg)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
fmt.Printf("%s\n", msg)
|
||||
}
|
||||
}).ServeHTTP(c.Response(), c.Request())
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
e := echo.New()
|
||||
e.Use(middleware.Logger())
|
||||
e.Use(middleware.Recover())
|
||||
e.Use(middleware.Static("../public"))
|
||||
e.GET("/ws", hello)
|
||||
if err := e.Start(":1323"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
39
recipe/websocket/public/index.html
Normal file
39
recipe/websocket/public/index.html
Normal file
@ -0,0 +1,39 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>WebSocket</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<p id="output"></p>
|
||||
|
||||
<script>
|
||||
var loc = window.location;
|
||||
var uri = 'ws:';
|
||||
|
||||
if (loc.protocol === 'https:') {
|
||||
uri = 'wss:';
|
||||
}
|
||||
uri += '//' + loc.host;
|
||||
uri += loc.pathname + 'ws';
|
||||
|
||||
ws = new WebSocket(uri)
|
||||
|
||||
ws.onopen = function() {
|
||||
console.log('Connected')
|
||||
}
|
||||
|
||||
ws.onmessage = function(evt) {
|
||||
var out = document.getElementById('output');
|
||||
out.innerHTML += evt.data + '<br>';
|
||||
}
|
||||
|
||||
setInterval(function() {
|
||||
ws.send('Hello, Server!');
|
||||
}, 1000);
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user