[概述]
dotweb.go是dotweb的入口类,它提供了dotweb实例的创建、配置及管理。它封装了dotweb对象,并提供了异常处理、缓存配置等函数。
[索引]
常量
type Dotweb
func New()
func (app *DotWeb) RegisterMiddlewareFunc(name string, middleFunc MiddlewareFunc)
[常量]
``
const(
DefaultHTTPPort //默认的端口号,值为8080
RunMode_Development = "development"
RunMode_Production = "production"
)
``
[type Dotweb]
~~~
type (
DotWeb struct {
HttpServer *HttpServer //server对象
cache cache.Cache //cache对象
OfflineServer servers.Server
Config *config.Config //config对象
Middlewares []Middleware //中间件
ExceptionHandler ExceptionHandle //异常处理
NotFoundHandler StandardHandle // NotFoundHandler 支持自定义404处理代码能力
MethodNotAllowedHandler StandardHandle // 处理未允许Method提交的请求
AppContext *core.ItemContext //请求级的上下文域
middlewareMap map[string]MiddlewareFunc
middlewareMutex *sync.RWMutex
}
// ExceptionHandle 支持自定义异常处理代码能力
ExceptionHandle func(Context, error)
// StandardHandle 标准处理函数,需传入Context参数
StandardHandle func(Context)
// 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.
HttpHandle func(Context) error
)
~~~
[func New()]
``
app := dotweb.New()
``
获取一个新的dotweb对象。
[func (app *DotWeb) RegisterMiddlewareFunc(name string, middleFunc MiddlewareFunc)]
``
app := dotweb.New()
app.RegisterMiddlewareFunc("jwt", jwt.Middleware(jwt.DefaultJWTConfig)
``
注册一个名为“jwt”的中间件,关于中间件请访问[middleware](https://github.com/devfeel/middleware)。
[func (app *Dotweb) GetMiddlewareFunc]
~~~
app := dotweb.New()
m, e := app.GetMiddlewareFunc("jwt")//若中间件存在e为true,若不存在则为false,m为nil值。
~~~
根据name获取中间件函数。
[func (app *Dotweb) Cache]
~~~
app := dotweb.New()
c := app.Cache()
~~~
获取Cache缓存对象。
[func (app *Dotweb) SetCache]
~~~
app := dotweb.New()
app.SetCache(cache.NewRuntimeCache())//使用本机内存缓存
~~~
设置缓存方式,dotweb默认提供Runtime和Redis两种方式,可以自行扩展别的方式。
[func (app *DotWeb) RunMode(]
~~~
app := dotweb.New()
app.RunMode()//development
~~~
获取dotweb运行模式,具有development以及production两种模式。前者表示开发模式,后者表示生产模式,开发模式会打印详细的异常信息。
[func (app *DotWeb) IsDevelopmentMode]
~~~
app := dotweb.New()
app.IsDevelopmentMode()//true
~~~
判断运行模式是否是开发模式,dotweb默认值是开发模式。
[func (app *DotWeb) SetDevelopmentMode]
~~~
app := dotweb.New()
app.SetDevelopmentMode()
~~~
将dotweb运行模式设置为development(开发模式),大部分情况下你不用使用此设置,因为它是默认设置。
[func (app *DotWeb) SetProductionMode]
~~~
app := dotweb.New()
app.SetProductionMode()
~~~
将dotweb运行模式设置为production(生产模式)。
[func (app *DotWeb) Use]
~~~
app := dotweb.New()
m := &[5]Middleware
app.Use(m)
~~~
注册中间件。需要注意的是它接收一个可变长度参数,注意这个“可变参数”在代码中表示“...”,由于翻译问题也有叫它多变参数的,它们表示的是同一个意思。
[func (app *DotWeb) UseRequestLog]
~~~
app := dotweb.New()
app.UseRequestLog()
~~~
使用dotweb提供的Requestlog中间件。
[func (app *DotWeb) SetExceptionHandle]
~~~
func ExceptionHandler(c dotweb.Context, e error){//...}
app := dotweb.New()
app.SetExceptionHandle(ExceptionHandler)
~~~
设置异常处理程序。
[func (app *DotWeb) SetNotFoundHandle]
~~~
func NotFoundHandler(c dotweb.Context){//...}
app := dotweb.New()
app.SetNotFoundHandle(NotFoundHandler)
~~~
设置404处理程序。
[func (app *DotWeb) SetMethodNotAllowedHandle]
~~~
func MethodNotAllowedHandler(c dotweb.Context){//...}
app := dotweb.New()
app.SetMethodNotAllowedHandle(MethodNotAllowedHandler)
~~~
设置被禁用的请求方法请求处理,比如一个请求只允许Post请求方法,如果用Get方法请求则被视为违规请求,此请求将被MethodNotAllowedHandle处理。
[func (app *DotWeb) SetPProfConfig]
~~~
app := dotweb.New()
app.SetPProfConfig(true, 8050)
~~~
设置是否启用PProf并设置端口号,默认是禁用状态。我们使用PProf服务来查询dotweb状态。
[func (app *DotWeb) SetLogger]
~~~
app := dotweb.New()
app.SetEnabledLog(true)//是否启用日志
app.SetLogPath(file.GetCurrentDirectory())//设置日志目录,GetCurrentDirectory表示获取当前项目目录
app.SetLogger(logger.Logger())
~~~
设置日志处理对象,dotweb默认提供logger.AppLog。
[func (app *DotWeb) SetConfig]
~~~
app := dotweb.New()
app.InitConfig(file.GetCurrentDirectory() + "/dotweb.json.conf", "json")
~~~
加载dotweb配置,dotweb配置可以通过代码设置之外还可以通过配置文件加载的方式。dotweb支持xml文件和json文件加载,一个dotweb实例只能使用一种文件配置方式,详细请参考[dotweb-Config](https://github.com/devfeel/dotweb-example/tree/master/config)或是阅读dotweb源码。
[func (app *DotWeb) StartServer]
~~~
app := dotweb.New()
app.StartServer(8080)
~~~
启动dotweb服务,并设置端口号。
[func (app *DotWeb) Start]
~~~
app := dotweb.New()
app.Start()
~~~
启动dotweb服务,它和StartServer区别是:你加载config文件之后直接启动服务,只需要在config文件里设置好一切配置。如果未设定端口号,它将使用dotweb默认端口号。
[func (app *DotWeb) MustStart]
~~~
app := dotweb.New()
app.MustStart()
~~~
仍然是启动dotweb服务,它调用Start函数。与Start不同的是,如果在启动时出现了配置错误会引发Panic。
[func (app *DotWeb) ListenAndServe]
~~~
app := dotweb.New()
app.ListenAndServe(8080)//8080是端口号
~~~
还是启动dotweb服务,不过ListenAndServer只会启动dotweb服务不会启动pprof服务。
[func (app *DotWeb) DefaultHTTPErrorHandler]
[func (app *DotWeb) DefaultNotFoundHandler]
[func (app *DotWeb) DefaultMethodNotAllowedHandler]
以上三个函数是dotweb提供的默认处理程序,针对SetExceptionHandle、SetNotFoundHandle、SetMethodNotAllowedHandle三个异常处理程序。
[func (app *DotWeb) Close]
~~~
app := dotweb.New()
app.Close()
~~~
立即关闭并停止dotweb服务。
[func (app *DotWeb) Shutdown]
~~~
app := dotweb.New()
app.Shutdown(app.HttpServer.pool.context.Get().(HttpContext).context)
~~~
关闭并停止dotweb服务,与Close立即停止服务不同的是,Shutdown会等待活动连接停止活动后关机。详细可查询Shutdown与Close的区别。