Echo Web框架

 主页   资讯   文章   代码   电子书 

子域名

server.go

package main

import (
    "net/http"

    "github.com/labstack/echo"
    "github.com/labstack/echo/middleware"
)

type (
    Host struct {
        Echo *echo.Echo
    }
)

func main() {
    // Hosts
    hosts := make(map[string]*Host)

    //-----
    // API
    //-----

    api := echo.New()
    api.Use(middleware.Logger())
    api.Use(middleware.Recover())

    hosts["api.localhost:1323"] = &Host{api}

    api.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "API")
    })

    //------
    // Blog
    //------

    blog := echo.New()
    blog.Use(middleware.Logger())
    blog.Use(middleware.Recover())

    hosts["blog.localhost:1323"] = &Host{blog}

    blog.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Blog")
    })

    //---------
    // Website
    //---------

    site := echo.New()
    site.Use(middleware.Logger())
    site.Use(middleware.Recover())

    hosts["localhost:1323"] = &Host{site}

    site.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Website")
    })

    // Server
    e := echo.New()
    e.Any("/*", func(c echo.Context) (err error) {
        req := c.Request()
        res := c.Response()
        host := hosts[req.Host]

        if host == nil {
            err = echo.ErrNotFound
        } else {
            host.Echo.ServeHTTP(res, req)
        }

        return
    })
    e.Logger.Fatal(e.Start(":1323"))
}