dotweb

package module
v0.0.0-...-2e696e2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 9, 2017 License: MIT Imports: 40 Imported by: 0

README

DotWeb

Simple and easy go web micro framework

GoDoc Go Report Card

1. Install

go get -u github.com/devfeel/dotweb

2. Getting Started

func StartServer() error {
	//init DotApp
	app := dotweb.New()
	//set log path
	app.SetLogPath("/home/logs/wwwroot/")
	//set route
	app.HttpServer.GET("/index", func(ctx dotweb.Context) error{
		_, err := ctx.WriteString("welcome to my first web!")
		return err
	})
	//begin server
	err := app.StartServer(80)
	return err
}

examples: https://github.com/devfeel/dotweb-example

3. Features

  • 支持静态路由、参数路由、组路由
  • 路由支持文件/目录服务,支持设置是否允许目录浏览
  • 中间件支持,支持App、Group、Router级别的设置
  • Feature支持,可绑定HttpServer全局启用
  • 支持STRING/JSON/JSONP/HTML格式输出
  • 统一的HTTP错误处理
  • 统一的日志处理
  • 支持Hijack与websocket
  • 内建Cache支持
  • 支持接入第三方模板引擎(需实现dotweb.Renderer接口)
  • 模块可配置化,85%模块可通过配置维护
Config Example

dotweb.conf

<?xml version="1.0" encoding="UTF-8"?>
<config>
<app logpath="d:/gotmp/" enabledlog="true" runmode="development"/>
<offline offline="false" offlinetext="server is offline!" offlineurl="" />
<server isrun="true" port="8080" enabledgzip="false" enabledlistdir="false" enabledautohead="true"/>
<session enabled="true" mode="runtime" timeout="20"/>
<middlewares>
    <middleware name="applog" isuse="true" />
</middlewares>
<routers>
    <router method="GET" path="/index" handler="Index" isuse="true">
         <middleware name="urllog" isuse="true" />
    </router>
    <router method="GET" path="/redirect" handler="Redirect" isuse="true"></router>
    <router method="GET" path="/error" handler="DefaultError" isuse="true"></router>
</routers>
<groups>
    <group path="/admin" isuse="true">
        <middleware name="grouplog" isuse="true" />
        <middleware name="simpleauth" isuse="true" />
        <router method="GET" path="/login" handler="Login" isuse="true"></router>
        <router method="GET" path="/logout" handler="Logout" isuse="true"></router>
    </group>
</groups>
</config> 

dotweb.json.conf

{
    "app": {
        "logpath": "d:/",
        "enabledlog": false,
        "runmode": "development",
        "pprofport": 8081,
        "enabledpprof": true
    },
    "offline": {
        "offline": false,
        "offlinetext": "",
        "offlineurl": ""
    },
    "server": {
        "enabledlistdir": false,
        "enabledgzip": false,
        "enabledautohead": true,
        "enabledautocors": false,
        "port": 8080
    },
    "session": {
        "enabled": true,
        "mode": "runtime",
        "timeout": 20,
        "serverip": ""
    },
    "routers": [
        {
            "method": "get",
            "path": "/index",
            "HandlerName": "Index",
            "isuse": true
        },
        {
            "method": "get",
            "path": "/redirect",
            "HandlerName": "Redirect",
            "isuse": true
        },
        {
            "method": "get",
            "path": "/error",
            "HandlerName": "DefaultError",
            "isuse": true
        }
    ],
    "Groups": [
        {
            "Path": "/admin",
            "Routers": [
                {
                    "Method": "GET",
                    "Path": "/login",
                    "HandlerName": "Login",
                    "IsUse": true
                },
                {
                    "Method": "GET",
                    "Path": "/logout",
                    "HandlerName": "Logout",
                    "IsUse": true
                }
            ],
            "IsUse": true
        }
    ]
}

4. Router

1) 常规路由
  • 支持GET\POST\HEAD\OPTIONS\PUT\PATCH\DELETE 这几类请求方法
  • 支持HiJack\WebSocket\ServerFile三类特殊应用
  • 支持Any注册方式,默认兼容GET\POST\HEAD\OPTIONS\PUT\PATCH\DELETE方式
  • 支持通过配置开启默认添加HEAD方式
  • 支持注册Handler,以启用配置化
  • 支持检查请求与指定路由是否匹配
1、Router.GET(path string, handle HttpHandle)
2、Router.POST(path string, handle HttpHandle)
3、Router.HEAD(path string, handle HttpHandle)
4、Router.OPTIONS(path string, handle HttpHandle)
5、Router.PUT(path string, handle HttpHandle)
6、Router.PATCH(path string, handle HttpHandle)
7、Router.DELETE(path string, handle HttpHandle)
8、Router.HiJack(path string, handle HttpHandle)
9、Router.WebSocket(path string, handle HttpHandle)
10、Router.Any(path string, handle HttpHandle)
11、Router.RegisterRoute(routeMethod string, path string, handle HttpHandle)
12、Router.RegisterHandler(name string, handler HttpHandle)
13、Router.GetHandler(name string) (HttpHandle, bool)
14、Router.MatchPath(ctx Context, routePath string) bool

接受两个参数,一个是URI路径,另一个是 HttpHandle 类型,设定匹配到该路径时执行的方法;

2) static router

静态路由语法就是没有任何参数变量,pattern是一个固定的字符串。

package main

import (
    "github.com/devfeel/dotweb"
)

func main() {
    dotapp := dotweb.New()
    dotapp.HttpServer.GET("/hello", func(ctx *dotweb.HttpContext) {
        ctx.WriteString("hello world!")
    })
    dotapp.StartServer(80)
}

test: curl http://127.0.0.1/hello

3) parameter router

参数路由以冒号 : 后面跟一个字符串作为参数名称,可以通过 HttpContext的 GetRouterName 方法获取路由参数的值。

package main

import (
    "github.com/devfeel/dotweb"
)

func main() {
    dotapp := dotweb.New()
    dotapp.HttpServer.GET("/hello/:name", func(ctx dotweb.Context) error{
        _, err := ctx.WriteString("hello " + ctx.GetRouterName("name"))
        return err
    })
    dotapp.HttpServer.GET("/news/:category/:newsid", func(ctx dotweb.Context) error{
    	category := ctx.GetRouterName("category")
	    newsid := ctx.GetRouterName("newsid")
        _, err := ctx.WriteString("news info: category=" + category + " newsid=" + newsid)
        return err
    })
    dotapp.StartServer(80)
}

test:
curl http://127.0.0.1/hello/devfeel
curl http://127.0.0.1/hello/category1/1

4) group router
    g := server.Group("/user")
	g.GET("/", Index)
	g.GET("/profile", Profile)

test:
curl http://127.0.0.1/user
curl http://127.0.0.1/user/profile

5. Binder

  • HttpContext.Bind(interface{})
  • Support data from json、xml、Form
type UserInfo struct {
		UserName string `form:"user"`
		Sex      int    `form:"sex"`
}

func(ctx *dotweb.HttpContext) TestBind{
        user := new(UserInfo)
        if err := ctx.Bind(user); err != nil {
        	 ctx.WriteString("err => " + err.Error())
        }else{
             ctx.WriteString("TestBind " + fmt.Sprint(user))
        }
}

6. Middleware

Middleware
  • 支持粒度:App、Group、RouterNode
  • DotWeb.Use(m ...Middleware)
  • Group.Use(m ...Middleware)
  • RouterNode.Use(m ...Middleware)
  • 启用顺序:App -> Group -> RouterNode,同级别下按Use的引入顺序执行
  • Middleware List
  • JWT - example
  • AccessLog - example
  • CROS - example
  • Gzip
  • BasicAuth
  • Recover
  • HeaderOverride
app.Use(NewAccessFmtLog("app"))

func InitRoute(server *dotweb.HttpServer) {
	server.GET("/", Index)
	server.GET("/use", Index).Use(NewAccessFmtLog("Router-use"))

	g := server.Group("/group").Use(NewAccessFmtLog("group"))
	g.GET("/", Index)
	g.GET("/use", Index).Use(NewAccessFmtLog("group-use"))
}

type AccessFmtLog struct {
	dotweb.BaseMiddlware
	Index string
}

func (m *AccessFmtLog) Handle(ctx dotweb.Context) error {
	fmt.Println(time.Now(), "[AccessFmtLog ", m.Index, "] begin request -> ", ctx.Request.RequestURI)
	err := m.Next(ctx)
	fmt.Println(time.Now(), "[AccessFmtLog ", m.Index, "] finish request ", err, " -> ", ctx.Request.RequestURI)
	return err
}

func NewAccessFmtLog(index string) *AccessFmtLog {
	return &AccessFmtLog{Index: index}
}

7. Server Config

HttpServer:
  • HttpServer.EnabledSession 设置是否开启Session支持,目前支持runtime、redis两种模式,默认不开启
  • HttpServer.EnabledGzip 设置是否开启Gzip支持,默认不开启
  • HttpServer.EnabledListDir 设置是否启用目录浏览,仅对Router.ServerFile有效,若设置该项,则可以浏览目录文件,默认不开启
  • HttpServer.EnabledAutoHEAD 设置是否自动启用Head路由,若设置该项,则会为除Websocket\HEAD外所有路由方式默认添加HEAD路由,默认不开启
Run Mode
  • 新增development、production模式
  • 默认development,通过DotWeb.SetDevelopmentMode\DotWeb.SetProductionMode开启相关模式
  • 若设置development模式,未处理异常会输出异常详细信息
  • 未来会拓展更多运行模式的配置

8. Exception

500 error
  • Default: 当发生未处理异常时,会根据RunMode向页面输出默认错误信息或者具体异常信息,并返回 500 错误头
  • User-defined: 通过DotServer.SetExceptionHandle(handler *ExceptionHandle)实现自定义异常处理逻辑
type ExceptionHandle func(Context, error)
404 error
  • Default: 当发生404异常时,会默认使用http.NotFound处理
  • User-defined: 通过DotWeb.SetNotFoundHandle(handler NotFoundHandle)实现自定义404处理逻辑
type NotFoundHandle  func(http.ResponseWriter, *http.Request)

9. Session

Support store in runtime、redis
  • default is disabled, you must use app.HttpServer.SetEnabledSession(true) to enabled it
  • runtime:store in runtime memory
  • redis:store in redis,redis-key named with dotweb:session:xxxxxxxxxxxx
//enabled session
dotapp.HttpServer.SetEnabledSession(true)
//use runtime mode
dotapp.HttpServer.SetSessionConfig(session.NewDefaultRuntimeConfig())
//use redis mode
dotapp.HttpServer.SetSessionConfig(session.NewDefaultRedisConfig("127.0.0.1:6379"))
//use session with DotWeb.Context
ctx.Session().Set(key, value)

Dependency

websocket - golang.org/x/net/websocket
redis - github.com/garyburd/redigo/redis

相关项目

TokenServer

项目简介:token服务,提供token一致性服务以及相关的全局ID生成服务等

贡献名单

目前已经有几位朋友在为框架一起做努力,我们将在合适的时间向大家展现,谢谢他们的支持!

Contact Us

QQ-Group:193409346

Documentation

Index

Constants

View Source
const (
	LogTarget_Default     = "dotweb_default"
	LogTarget_HttpRequest = "dotweb_request"
	LogTarget_HttpServer  = "dotweb_server"

	LogLevel_Debug = "debug"
	LogLevel_Info  = "info"
	LogLevel_Warn  = "warn"
	LogLevel_Error = "error"
)

Log define

View Source
const (
	CharsetUTF8       = "text/plain; charset=utf-8"
	DefaultServerName = "dotweb"
)

Http define

View Source
const (
	MIMEApplicationJSON                  = "application/json"
	MIMEApplicationJSONCharsetUTF8       = MIMEApplicationJSON + "; " + CharsetUTF8
	MIMEApplicationJavaScript            = "application/javascript"
	MIMEApplicationJavaScriptCharsetUTF8 = MIMEApplicationJavaScript + "; " + CharsetUTF8
	MIMEApplicationXML                   = "application/xml"
	MIMEApplicationXMLCharsetUTF8        = MIMEApplicationXML + "; " + CharsetUTF8
	MIMEApplicationForm                  = "application/x-www-form-urlencoded"
	MIMEApplicationProtobuf              = "application/protobuf"
	MIMEApplicationMsgpack               = "application/msgpack"
	MIMETextHTML                         = "text/html"
	MIMETextHTMLCharsetUTF8              = MIMETextHTML + "; " + CharsetUTF8
	MIMETextPlain                        = "text/plain"
	MIMETextPlainCharsetUTF8             = MIMETextPlain + "; " + CharsetUTF8
	MIMEMultipartForm                    = "multipart/form-data"
	MIMEOctetStream                      = "application/octet-stream"
)

MIME types

View Source
const (
	HeaderAcceptEncoding                = "Accept-Encoding"
	HeaderAllow                         = "Allow"
	HeaderAuthorization                 = "Authorization"
	HeaderContentDisposition            = "Content-Disposition"
	HeaderContentEncoding               = "Content-Encoding"
	HeaderContentLength                 = "Content-Length"
	HeaderContentType                   = "Content-Type"
	HeaderCookie                        = "Cookie"
	HeaderSetCookie                     = "Set-Cookie"
	HeaderIfModifiedSince               = "If-Modified-Since"
	HeaderLastModified                  = "Last-Modified"
	HeaderLocation                      = "Location"
	HeaderUpgrade                       = "Upgrade"
	HeaderVary                          = "Vary"
	HeaderWWWAuthenticate               = "WWW-Authenticate"
	HeaderXRequestedWith                = "X-Requested-With"
	HeaderXForwardedProto               = "X-Forwarded-Proto"
	HeaderXHTTPMethodOverride           = "X-HTTP-Method-Override"
	HeaderXForwardedFor                 = "X-Forwarded-For"
	HeaderXRealIP                       = "X-Real-IP"
	HeaderServer                        = "Server"
	HeaderOrigin                        = "Origin"
	HeaderAccessControlRequestMethod    = "Access-Control-Request-Method"
	HeaderAccessControlRequestHeaders   = "Access-Control-Request-Headers"
	HeaderAccessControlAllowOrigin      = "Access-Control-Allow-Origin"
	HeaderAccessControlAllowMethods     = "Access-Control-Allow-Methods"
	HeaderAccessControlAllowHeaders     = "Access-Control-Allow-Headers"
	HeaderAccessControlAllowCredentials = "Access-Control-Allow-Credentials"
	HeaderAccessControlExposeHeaders    = "Access-Control-Expose-Headers"
	HeaderAccessControlMaxAge           = "Access-Control-Max-Age"
	HeaderP3P                           = "P3P"
	HeaderCacheControl                  = "Cache-control"

	// Security
	HeaderStrictTransportSecurity = "Strict-Transport-Security"
	HeaderXContentTypeOptions     = "X-Content-Type-Options"
	HeaderXXSSProtection          = "X-XSS-Protection"
	HeaderXFrameOptions           = "X-Frame-Options"
	HeaderContentSecurityPolicy   = "Content-Security-Policy"
	HeaderXCSRFToken              = "X-CSRF-Token"
)

Headers

View Source
const (
	DefaultHttpPort     = 80 //default http port
	RunMode_Development = "development"
	RunMode_Production  = "production"
)
View Source
const (
	RouteMethod_Any       = "ANY"
	RouteMethod_GET       = "GET"
	RouteMethod_HEAD      = "HEAD"
	RouteMethod_OPTIONS   = "OPTIONS"
	RouteMethod_POST      = "POST"
	RouteMethod_PUT       = "PUT"
	RouteMethod_PATCH     = "PATCH"
	RouteMethod_DELETE    = "DELETE"
	RouteMethod_HiJack    = "HIJACK"
	RouteMethod_WebSocket = "WEBSOCKET"
)
View Source
const (
	DefaultGzipLevel = 9
)

Variables

View Source
var FeatureTools *xFeatureTools
View Source
var (
	HttpMethodMap map[string]string
)

Functions

func NewInnerRenderer

func NewInnerRenderer() *innerRenderer

NewInnerRenderer create a inner renderer instance

func NewRouter

func NewRouter(server *HttpServer) *router

New returns a new initialized Router. Path auto-correction, including trailing slashes, is enabled by default.

Types

type BaseMiddlware

type BaseMiddlware struct {
	// contains filtered or unexported fields
}

middleware 基础类,应用可基于此实现完整Moddleware

func (*BaseMiddlware) Next

func (bm *BaseMiddlware) Next(ctx Context) error

func (*BaseMiddlware) SetNext

func (bm *BaseMiddlware) SetNext(m Middleware)

type Binder

type Binder interface {
	Bind(interface{}, Context) error
}

Binder is the interface that wraps the Bind method.

type Context

type Context interface {
	HttpServer() *HttpServer
	Response() *Response
	Request() *Request
	WebSocket() *WebSocket
	HijackConn() *HijackConn
	RouterNode() RouterNode
	RouterParams() Params
	Handler() HttpHandle
	AppContext() *core.ItemContext
	Cache() cache.Cache
	Items() *core.ItemContext
	AppSetConfig() *core.ItemContext
	ViewData() *core.ItemContext
	SessionID() string
	Session() (state *session.SessionState)
	Hijack() (*HijackConn, error)
	IsHijack() bool
	IsWebSocket() bool
	End()
	IsEnd() bool
	Redirect(code int, targetUrl string) error
	QueryString(key string) string
	FormValue(key string) string
	PostFormValue(key string) string
	Bind(i interface{}) error
	GetRouterName(key string) string
	RemoteIP() string
	SetCookieValue(name, value string, maxAge int)
	SetCookie(cookie *http.Cookie)
	RemoveCookie(name string)
	ReadCookieValue(name string) (string, error)
	ReadCookie(name string) (*http.Cookie, error)
	View(name string) error
	ViewC(code int, name string) error
	Write(code int, content []byte) (int, error)
	WriteString(contents ...interface{}) (int, error)
	WriteStringC(code int, contents ...interface{}) (int, error)
	WriteBlob(contentType string, b []byte) (int, error)
	WriteBlobC(code int, contentType string, b []byte) (int, error)
	WriteJson(i interface{}) (int, error)
	WriteJsonC(code int, i interface{}) (int, error)
	WriteJsonBlob(b []byte) (int, error)
	WriteJsonBlobC(code int, b []byte) (int, error)
	WriteJsonp(callback string, i interface{}) (int, error)
	WriteJsonpBlob(callback string, b []byte) (size int, err error)
}

type DotWeb

type DotWeb struct {
	HttpServer *HttpServer

	OfflineServer    servers.Server
	Config           *config.Config
	Modules          []*HttpModule
	Middlewares      []Middleware
	ExceptionHandler ExceptionHandle
	NotFoundHandler  NotFoundHandle
	AppContext       *core.ItemContext
	// contains filtered or unexported fields
}

func New

func New() *DotWeb

* 创建DotServer实例,返回指针

func (*DotWeb) Cache

func (app *DotWeb) Cache() cache.Cache

Cache return cache interface

func (*DotWeb) DefaultHTTPErrorHandler

func (ds *DotWeb) DefaultHTTPErrorHandler(ctx Context, err error)

DefaultHTTPErrorHandler default exception handler

func (*DotWeb) GetMiddlewareFunc

func (app *DotWeb) GetMiddlewareFunc(name string) (MiddlewareFunc, bool)

GetMiddlewareFunc get middleware with gived name

func (*DotWeb) IsDevelopmentMode

func (app *DotWeb) IsDevelopmentMode() bool

IsDevelopmentMode check current run mode is development mode

func (*DotWeb) MustStart

func (app *DotWeb) MustStart()

MustStart start app server with set config If an exception occurs, will be panic it if no set Server.Port, will be use DefaultHttpPort

func (*DotWeb) RegisterMiddlewareFunc

func (app *DotWeb) RegisterMiddlewareFunc(name string, middleFunc MiddlewareFunc)

RegisterMiddlewareFunc register middleware with gived name & middleware

func (*DotWeb) RegisterModule deprecated

func (app *DotWeb) RegisterModule(module *HttpModule)

Deprecated: Use the Middleware instead RegisterModule 添加处理模块

func (*DotWeb) RunMode

func (app *DotWeb) RunMode() string

RunMode current app run mode, if not set, default set RunMode_Development

func (*DotWeb) SetCache

func (app *DotWeb) SetCache(ca cache.Cache)

SetCache set cache interface

func (*DotWeb) SetConfig

func (app *DotWeb) SetConfig(config *config.Config) error

SetConfig set config for app

func (*DotWeb) SetDevelopmentMode

func (app *DotWeb) SetDevelopmentMode()

SetDevelopmentMode set run mode on development mode

func (*DotWeb) SetEnabledLog

func (app *DotWeb) SetEnabledLog(enabledLog bool)

SetEnabledLog set enabled log flag

func (*DotWeb) SetExceptionHandle

func (app *DotWeb) SetExceptionHandle(handler ExceptionHandle)

SetExceptionHandle set custom error handler

func (*DotWeb) SetLogPath

func (app *DotWeb) SetLogPath(path string)

SetLogPath set log root path

func (*DotWeb) SetLogger

func (app *DotWeb) SetLogger(log logger.AppLog)

SetLogger set user logger, the logger must implement logger.AppLog interface

func (*DotWeb) SetNotFoundHandle

func (app *DotWeb) SetNotFoundHandle(handler NotFoundHandle)

SetNotFoundHandle set custom 404 handler

func (*DotWeb) SetPProfConfig

func (app *DotWeb) SetPProfConfig(enabledPProf bool, httpport int)

SetPProfConfig set pprofserver config, default is disable and don't use same port with StartServer

func (*DotWeb) SetProductionMode

func (app *DotWeb) SetProductionMode()

SetProductionMode set run mode on production mode

func (*DotWeb) Start

func (app *DotWeb) Start() error

Start start app server with set config If an exception occurs, will be return it if no set Server.Port, will be use DefaultHttpPort

func (*DotWeb) StartServer

func (app *DotWeb) StartServer(httpport int) error

启动WebServer * 需要初始化HttpRoute * httpPort := 80

func (*DotWeb) StartServerWithConfig

func (app *DotWeb) StartServerWithConfig(config *config.Config) error

StartServerWithConfig start server with config

func (*DotWeb) Use

func (app *DotWeb) Use(m ...Middleware)

Use registers a middleware

func (*DotWeb) UseRequestLog

func (app *DotWeb) UseRequestLog()

UseRequestLog register RequestLog middleware

type ExceptionHandle

type ExceptionHandle func(Context, error)

type Group

type Group interface {
	Use(m ...Middleware) Group
	Group(prefix string, m ...Middleware) Group
	DELETE(path string, h HttpHandle) RouterNode
	GET(path string, h HttpHandle) RouterNode
	HEAD(path string, h HttpHandle) RouterNode
	OPTIONS(path string, h HttpHandle) RouterNode
	PATCH(path string, h HttpHandle) RouterNode
	POST(path string, h HttpHandle) RouterNode
	PUT(path string, h HttpHandle) RouterNode
	RegisterRoute(method, path string, h HttpHandle) RouterNode
}

func NewGroup

func NewGroup(prefix string, server *HttpServer) Group

type HijackConn

type HijackConn struct {
	ReadWriter *bufio.ReadWriter
	Conn       net.Conn
	// contains filtered or unexported fields
}

hijack conn

func (*HijackConn) Close

func (hj *HijackConn) Close() error

Close close hijack conn

func (*HijackConn) SetHeader

func (hj *HijackConn) SetHeader(key, value string)

SetHeader hjiack conn write header

func (*HijackConn) WriteBlob

func (hj *HijackConn) WriteBlob(p []byte) (size int, err error)

WriteBlob hjiack conn write []byte

func (*HijackConn) WriteString

func (hj *HijackConn) WriteString(content string) (int, error)

WriteString hjiack conn write string

type HttpContext

type HttpContext struct {
	// contains filtered or unexported fields
}

func (*HttpContext) AppContext

func (ctx *HttpContext) AppContext() *core.ItemContext

AppContext get application's global appcontext issue #3

func (*HttpContext) AppSetConfig

func (ctx *HttpContext) AppSetConfig() *core.ItemContext

AppSetConfig get appset from config file update for issue #16 配置文件

func (*HttpContext) Bind

func (ctx *HttpContext) Bind(i interface{}) error

* 支持Json、Xml、Form提交的属性绑定

func (*HttpContext) Cache

func (ctx *HttpContext) Cache() cache.Cache

Cache get application's global cache

func (*HttpContext) End

func (ctx *HttpContext) End()

End set context user handler process end if set HttpContext.End,ignore user handler, but exec all http module - fixed issue #5

func (*HttpContext) Features

func (ctx *HttpContext) Features() *xFeatureTools

func (*HttpContext) FormValue

func (ctx *HttpContext) FormValue(key string) string

* 根据指定key获取包括在post、put和get内的值

func (*HttpContext) GetRouterName

func (ctx *HttpContext) GetRouterName(key string) string

func (*HttpContext) Handler

func (ctx *HttpContext) Handler() HttpHandle

func (*HttpContext) Hijack

func (ctx *HttpContext) Hijack() (*HijackConn, error)

Hijack make current connection to hijack mode

func (*HttpContext) HijackConn

func (ctx *HttpContext) HijackConn() *HijackConn

func (*HttpContext) HttpServer

func (ctx *HttpContext) HttpServer() *HttpServer

func (*HttpContext) IsEnd

func (ctx *HttpContext) IsEnd() bool

func (*HttpContext) IsHijack

func (ctx *HttpContext) IsHijack() bool

func (*HttpContext) IsWebSocket

func (ctx *HttpContext) IsWebSocket() bool

func (*HttpContext) Items

func (ctx *HttpContext) Items() *core.ItemContext

Items get request's tem context lazy init when first use

func (*HttpContext) PostFormValue

func (ctx *HttpContext) PostFormValue(key string) string

* 根据指定key获取包括在post、put内的值

func (*HttpContext) QueryString

func (ctx *HttpContext) QueryString(key string) string

* 根据指定key获取对应value

func (*HttpContext) ReadCookie

func (ctx *HttpContext) ReadCookie(name string) (*http.Cookie, error)

ReadCookie read cookie object for name

func (*HttpContext) ReadCookieValue

func (ctx *HttpContext) ReadCookieValue(name string) (string, error)

ReadCookieValue read cookie value for name

func (*HttpContext) Redirect

func (ctx *HttpContext) Redirect(code int, targetUrl string) error

Redirect redirect replies to the request with a redirect to url and with httpcode default you can use http.StatusFound

func (*HttpContext) RemoteIP

func (ctx *HttpContext) RemoteIP() string

RemoteIP return user IP address

func (*HttpContext) RemoveCookie

func (ctx *HttpContext) RemoveCookie(name string)

RemoveCookie remove cookie for path&name

func (*HttpContext) Request

func (ctx *HttpContext) Request() *Request

func (*HttpContext) Response

func (ctx *HttpContext) Response() *Response

func (*HttpContext) RouterNode

func (ctx *HttpContext) RouterNode() RouterNode

func (*HttpContext) RouterParams

func (ctx *HttpContext) RouterParams() Params

func (*HttpContext) Session

func (ctx *HttpContext) Session() (state *session.SessionState)

Session get session state in current context

func (*HttpContext) SessionID

func (ctx *HttpContext) SessionID() string

func (*HttpContext) SetCookie

func (ctx *HttpContext) SetCookie(cookie *http.Cookie)

SetCookie write cookie with cookie-obj

func (*HttpContext) SetCookieValue

func (ctx *HttpContext) SetCookieValue(name, value string, maxAge int)

SetCookieValue write cookie for name & value & maxAge default path = "/" default domain = current domain default maxAge = 0 //seconds seconds=0 means no 'Max-Age' attribute specified. seconds<0 means delete cookie now, equivalently 'Max-Age: 0' seconds>0 means Max-Age attribute present and given in seconds

func (*HttpContext) View

func (ctx *HttpContext) View(name string) error

View write view content to response

func (*HttpContext) ViewC

func (ctx *HttpContext) ViewC(code int, name string) error

ViewC write (httpCode, view content) to response

func (*HttpContext) ViewData

func (ctx *HttpContext) ViewData() *core.ItemContext

ViewData get view data context lazy init when first use

func (*HttpContext) WebSocket

func (ctx *HttpContext) WebSocket() *WebSocket

func (*HttpContext) Write

func (ctx *HttpContext) Write(code int, content []byte) (int, error)

Write write code and content content to response

func (*HttpContext) WriteBlob

func (ctx *HttpContext) WriteBlob(contentType string, b []byte) (int, error)

WriteBlob write []byte content to response

func (*HttpContext) WriteBlobC

func (ctx *HttpContext) WriteBlobC(code int, contentType string, b []byte) (int, error)

WriteBlobC write (httpCode, []byte) to response

func (*HttpContext) WriteJson

func (ctx *HttpContext) WriteJson(i interface{}) (int, error)

WriteJson write (httpCode, json string) to response auto convert interface{} to json string

func (*HttpContext) WriteJsonBlob

func (ctx *HttpContext) WriteJsonBlob(b []byte) (int, error)

WriteJsonBlob write json []byte to response

func (*HttpContext) WriteJsonBlobC

func (ctx *HttpContext) WriteJsonBlobC(code int, b []byte) (int, error)

WriteJsonBlobC write (httpCode, json []byte) to response

func (*HttpContext) WriteJsonC

func (ctx *HttpContext) WriteJsonC(code int, i interface{}) (int, error)

WriteJsonC write (httpCode, json string) to response auto convert interface{} to json string

func (*HttpContext) WriteJsonp

func (ctx *HttpContext) WriteJsonp(callback string, i interface{}) (int, error)

WriteJsonp write jsonp string to response

func (*HttpContext) WriteJsonpBlob

func (ctx *HttpContext) WriteJsonpBlob(callback string, b []byte) (size int, err error)

WriteJsonpBlob write jsonp string as []byte to response

func (*HttpContext) WriteString

func (ctx *HttpContext) WriteString(contents ...interface{}) (int, error)

WriteString write string content to response

func (*HttpContext) WriteStringC

func (ctx *HttpContext) WriteStringC(code int, contents ...interface{}) (int, error)

WriteStringC write (httpCode, string) to response

type HttpHandle

type HttpHandle func(Context) error

Handle is a function that can be registered to a route to handle HTTP requests. Like http.HandlerFunc, but has a special parameter Context contain all request and response data.

type HttpModule

type HttpModule struct {
	//响应请求时作为 HTTP 执行管线链中的第一个事件发生
	OnBeginRequest func(Context)
	//响应请求时作为 HTTP 执行管线链中的最后一个事件发生。
	OnEndRequest func(Context)
}

HttpModule定义

type HttpServer

type HttpServer struct {
	DotApp *DotWeb

	ServerConfig  *config.ServerNode
	SessionConfig *config.SessionNode

	Features *feature.Feature
	// contains filtered or unexported fields
}

HttpServer定义

func NewHttpServer

func NewHttpServer() *HttpServer

func (*HttpServer) Any

func (server *HttpServer) Any(path string, handle HttpHandle)

ANY is a shortcut for router.Handle("Any", path, handle) it support GET\HEAD\POST\PUT\PATCH\OPTIONS\DELETE

func (*HttpServer) Binder

func (server *HttpServer) Binder() Binder

Binder get binder interface in server

func (*HttpServer) DELETE

func (server *HttpServer) DELETE(path string, handle HttpHandle) RouterNode

DELETE is a shortcut for router.Handle("DELETE", path, handle)

func (*HttpServer) GET

func (server *HttpServer) GET(path string, handle HttpHandle) RouterNode

GET is a shortcut for router.Handle("GET", path, handle)

func (*HttpServer) GetSessionManager

func (server *HttpServer) GetSessionManager() *session.SessionManager

GetSessionManager get session manager in current httpserver

func (*HttpServer) Group

func (server *HttpServer) Group(prefix string) Group

Group create new group with current HttpServer

func (*HttpServer) HEAD

func (server *HttpServer) HEAD(path string, handle HttpHandle) RouterNode

HEAD is a shortcut for router.Handle("HEAD", path, handle)

func (*HttpServer) HiJack

func (server *HttpServer) HiJack(path string, handle HttpHandle)

func (*HttpServer) InitSessionManager

func (server *HttpServer) InitSessionManager()

InitSessionManager init session manager

func (*HttpServer) IsOffline

func (server *HttpServer) IsOffline() bool

IsOffline check server is set offline state

func (*HttpServer) OPTIONS

func (server *HttpServer) OPTIONS(path string, handle HttpHandle) RouterNode

OPTIONS is a shortcut for router.Handle("OPTIONS", path, handle)

func (*HttpServer) PATCH

func (server *HttpServer) PATCH(path string, handle HttpHandle) RouterNode

PATCH is a shortcut for router.Handle("PATCH", path, handle)

func (*HttpServer) POST

func (server *HttpServer) POST(path string, handle HttpHandle) RouterNode

POST is a shortcut for router.Handle("POST", path, handle)

func (*HttpServer) PUT

func (server *HttpServer) PUT(path string, handle HttpHandle) RouterNode

PUT is a shortcut for router.Handle("PUT", path, handle)

func (*HttpServer) Renderer

func (server *HttpServer) Renderer() Renderer

Renderer get renderer interface in server if no set, init InnerRenderer

func (*HttpServer) Router

func (server *HttpServer) Router() Router

Router get router interface in server

func (*HttpServer) ServeHTTP

func (server *HttpServer) ServeHTTP(w http.ResponseWriter, req *http.Request)

ServeHTTP make sure request can be handled correctly

func (*HttpServer) SetEnabledAutoHEAD

func (server *HttpServer) SetEnabledAutoHEAD(autoHEAD bool)

SetEnabledAutoHEAD set EnabledAutoHEAD true or false

func (*HttpServer) SetEnabledGzip

func (server *HttpServer) SetEnabledGzip(isEnabled bool)

SetEnabledGzip 设置是否启用gzip,默认为false

func (*HttpServer) SetEnabledListDir

func (server *HttpServer) SetEnabledListDir(isEnabled bool)

SetEnabledListDir 设置是否允许目录浏览,默认为false

func (*HttpServer) SetEnabledSession

func (server *HttpServer) SetEnabledSession(isEnabled bool)

SetEnabledSession 设置是否启用Session,默认为false

func (*HttpServer) SetOffline

func (server *HttpServer) SetOffline(offline bool, offlineText string, offlineUrl string)

SetOffline set server offline config

func (*HttpServer) SetRenderer

func (server *HttpServer) SetRenderer(r Renderer)

SetRenderer set custom renderer in server

func (*HttpServer) SetSessionConfig

func (server *HttpServer) SetSessionConfig(storeConfig *session.StoreConfig)

SetSessionConfig set session store config

func (*HttpServer) WebSocket

func (server *HttpServer) WebSocket(path string, handle HttpHandle)

type LogJson

type LogJson struct {
	RequestUrl string
	HttpHeader string
	HttpBody   string
}

type Middleware

type Middleware interface {
	Handle(ctx Context) error
	SetNext(m Middleware)
	Next(ctx Context) error
}

Middleware middleware interface

type MiddlewareFunc

type MiddlewareFunc func() Middleware

type Node

type Node struct {
	// contains filtered or unexported fields
}

func (*Node) Middlewares

func (n *Node) Middlewares() []Middleware

func (*Node) Node

func (n *Node) Node() *Node

func (*Node) Use

func (n *Node) Use(m ...Middleware) *Node

Use registers a middleware

type NotFoundHandle

type NotFoundHandle func(http.ResponseWriter, *http.Request)

type Param

type Param struct {
	Key   string
	Value string
}

Param is a single URL parameter, consisting of a key and a value.

type Params

type Params []Param

Params is a Param-slice, as returned by the router. The slice is ordered, the first URL parameter is also the first slice value. It is therefore safe to read values by the index.

func (Params) ByName

func (ps Params) ByName(name string) string

ByName returns the value of the first Param which key matches the given name. If no matching Param is found, an empty string is returned.

type Renderer

type Renderer interface {
	//set default template path, support multi path
	//模板查找顺序从最后一个插入的元素开始往前找
	//默认添加base、base/templates、base/views
	SetTemplatePath(path ...string)
	Render(io.Writer, string, interface{}, Context) error
}

Renderer is the interface that wraps the render method.

type Request

type Request struct {
	*http.Request
	// contains filtered or unexported fields
}

func (*Request) ContentType

func (req *Request) ContentType() string

func (*Request) FormFile

func (req *Request) FormFile(key string) (*UploadFile, error)

func (*Request) FormValues

func (req *Request) FormValues() map[string][]string

* 获取包括post、put和get内的值

func (*Request) FullRemoteIP

func (req *Request) FullRemoteIP() string

RemoteAddr to an "IP:port" address

func (*Request) IsAJAX

func (req *Request) IsAJAX() bool

IsAJAX returns if it is a ajax request

func (*Request) Path

func (req *Request) Path() string

Path returns requested path.

The path is valid until returning from RequestHandler.

func (*Request) PostBody

func (req *Request) PostBody() []byte

* 获取post提交的字节数组

func (*Request) PostString deprecated

func (req *Request) PostString(key string) string

Deprecated: Use the PostFormValue instead returns the first value for the named component of the POST or PUT request body. URL query parameters are ignored.

func (*Request) QueryHeader

func (req *Request) QueryHeader(key string) string

func (*Request) QueryString

func (req *Request) QueryString(key string) string

* 根据指定key获取对应value

func (*Request) QueryStrings

func (req *Request) QueryStrings() url.Values

* 返回查询字符串map表示

func (*Request) RawQuery

func (req *Request) RawQuery() string

* 获取原始查询字符串

func (*Request) RemoteIP

func (req *Request) RemoteIP() string

RemoteAddr to an "IP" address

func (*Request) Url

func (req *Request) Url() string

type RequestLogMiddleware

type RequestLogMiddleware struct {
	BaseMiddlware
}

请求日志中间件

func (*RequestLogMiddleware) Handle

func (m *RequestLogMiddleware) Handle(ctx Context) error

type Response

type Response struct {
	Status int
	Size   int64

	EnabledGzip bool
	// contains filtered or unexported fields
}

func NewResponse

func NewResponse(w http.ResponseWriter) (r *Response)

func (*Response) Body

func (r *Response) Body() []byte

func (*Response) BodyString

func (r *Response) BodyString() string

func (*Response) End

func (r *Response) End()

stop current response

func (*Response) Flush

func (r *Response) Flush()

Flush implements the http.Flusher interface to allow an HTTP handler to flush buffered data to the client. See http.Flusher(https://golang.org/pkg/net/http/#Flusher)

func (*Response) Header

func (r *Response) Header() http.Header

func (*Response) Hijack

func (r *Response) Hijack() (net.Conn, *bufio.ReadWriter, error)

Hijack implements the http.Hijacker interface to allow an HTTP handler to take over the connection. See https://golang.org/pkg/net/http/#Hijacker

func (*Response) QueryHeader

func (r *Response) QueryHeader(key string) string

func (*Response) Redirect

func (r *Response) Redirect(code int, targetUrl string) error

func (*Response) SetContentType

func (r *Response) SetContentType(contenttype string)

func (*Response) SetEnabledGzip

func (r *Response) SetEnabledGzip(isEnabled bool)

func (*Response) SetHeader

func (r *Response) SetHeader(key, val string)

func (*Response) SetStatusCode

func (r *Response) SetStatusCode(code int) error

func (*Response) Write

func (r *Response) Write(code int, b []byte) (n int, err error)

Write writes the data to the connection as part of an HTTP reply.

func (*Response) WriteHeader

func (r *Response) WriteHeader(code int) error

WriteHeader sends an HTTP response header with status code. If WriteHeader is not called explicitly, the first call to Write will trigger an implicit WriteHeader(http.StatusOK). Thus explicit calls to WriteHeader are mainly used to send error codes.

func (*Response) Writer

func (r *Response) Writer() http.ResponseWriter

type Router

type Router interface {
	ServeHTTP(w http.ResponseWriter, req *http.Request)
	ServerFile(path string, fileRoot string) RouterNode
	GET(path string, handle HttpHandle) RouterNode
	HEAD(path string, handle HttpHandle) RouterNode
	OPTIONS(path string, handle HttpHandle) RouterNode
	POST(path string, handle HttpHandle) RouterNode
	PUT(path string, handle HttpHandle) RouterNode
	PATCH(path string, handle HttpHandle) RouterNode
	DELETE(path string, handle HttpHandle) RouterNode
	HiJack(path string, handle HttpHandle)
	WebSocket(path string, handle HttpHandle)
	Any(path string, handle HttpHandle)
	RegisterRoute(routeMethod string, path string, handle HttpHandle) RouterNode
	RegisterHandler(name string, handler HttpHandle)
	GetHandler(name string) (HttpHandle, bool)
	MatchPath(ctx Context, routePath string) bool
}

Router is the interface that wraps the router method.

type RouterHandle

type RouterHandle func(http.ResponseWriter, *http.Request, *ValueNode)

Handle is a function that can be registered to a route to handle HTTP requests. Like http.HandlerFunc, but has a third parameter for the values of wildcards (variables).

type RouterNode

type RouterNode interface {
	Use(m ...Middleware) *Node
	Middlewares() []Middleware
	Node() *Node
}

type UploadFile

type UploadFile struct {
	File   multipart.File
	Header *multipart.FileHeader
	// contains filtered or unexported fields
}

func NewUploadFile

func NewUploadFile(file multipart.File, header *multipart.FileHeader) *UploadFile

func (*UploadFile) FileName

func (f *UploadFile) FileName() string

get upload file client-local name

func (*UploadFile) GetFileExt

func (f *UploadFile) GetFileExt() string

get upload file extensions

func (*UploadFile) SaveFile

func (f *UploadFile) SaveFile(fileName string) (size int64, err error)

save file in server-local with filename

func (*UploadFile) Size

func (f *UploadFile) Size() int64

get upload file size

type ValueNode

type ValueNode struct {
	Params
	Method string
	Node   *Node
}

type WebSocket

type WebSocket struct {
	Conn *websocket.Conn
}

func (*WebSocket) ReadMessage

func (ws *WebSocket) ReadMessage() (string, error)

read message from websocket.conn

func (*WebSocket) Request

func (ws *WebSocket) Request() *http.Request

get http request

func (*WebSocket) SendMessage

func (ws *WebSocket) SendMessage(msg string) error

send message from websocket.conn

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL