GoWeb開發_Iris框架講解(三):路由功能處理方式

qfDavie發表於2019-03-28

Context概念

Context是iris框架中的一個路由上下文物件,在iris框架中的原始碼路徑定義為:{$goPath}\github.com\kataras\iris\context\context.go。以下是Context的宣告和定義:

package context
type Context interface {
    BeginRequest(http.ResponseWriter, *http.Request)
    EndRequest()
    ResponseWriter() ResponseWriter
    ResetResponseWriter(ResponseWriter)
    Request() *http.Request
    SetCurrentRouteName(currentRouteName string)
    GetCurrentRoute() RouteReadOnly
    Do(Handlers)
    AddHandler(...Handler)
    SetHandlers(Handlers)
    Handlers() Handlers
    HandlerIndex(n int) (currentIndex int)
    Proceed(Handler) bool
    HandlerName() string
    Next()
    NextOr(handlers ...Handler) bool
    NextOrNotFound() bool
    NextHandler() Handler
    Skip()
    StopExecution()
    IsStopped() bool
    Params() *RequestParams
    Values() *memstore.Store
    Translate(format string, args ...interface{}) string
    Method() string
    Path() string
    RequestPath(escape bool) string
    Host() string
    Subdomain() (subdomain string)
    IsWWW() bool
    RemoteAddr() string
    GetHeader(name string) string
    IsAjax() bool
    IsMobile() bool
    Header(name string, value string)
    ContentType(cType string)
    GetContentType() string
    GetContentLength() int64
    StatusCode(statusCode int)
    GetStatusCode() int
    Redirect(urlToRedirect string, statusHeader ...int)
    URLParamExists(name string) bool
    URLParamDefault(name string, def string) string
    URLParam(name string) string
    URLParamTrim(name string) string
    URLParamEscape(name string) string
    View(filename string, optionalViewModel ...interface{}) error
    Text(text string) (int, error)
    HTML(htmlContents string) (int, error)
    JSON(v interface{}, options ...JSON) (int, error)
    JSONP(v interface{}, options ...JSONP) (int, error)
    XML(v interface{}, options ...XML) (int, error)
    Markdown(markdownB []byte, options ...Markdown) (int, error)
    ......複製程式碼

在該Context的介面定義中,我們可以發現,包含很多處理請求及資料返回的操作。在iris框架內,提供給開發者一個ContextPool,即儲存上下文變數Context的管理池,該變數池中有多個context例項,可以進行復用。每次有新請求,就會獲取一個新的context變數例項,來進行請求的路由處理。我們在實際的案例學習中,會向大家展示關於Context的相關用法。學習者bu

正規表示式路由

Iris框架在進行處理http請求時,支援請求url中包含正規表示式。 正規表示式的具體規則為:

  • 1、使用{}對增則表示式進行包裹,url中出現類似{}樣式的格式,即識別為正規表示式

  • 2、支援自定義增則表示式的變數的命名,變數名用字母表示。比如:{name}

  • 3、支援對自定義正規表示式變數的資料型別限制,變數名和對應的資料型別之間用“:”分隔開。比如:{name:string}表示增則表示式為name,型別限定為string型別

  • 4、通過context.Params()的Get()和GetXxx()系列方法來獲取對應的請求url中的增則表示式的變數

  • 5、增則表示式支援變數的資料型別包括:string、int、uint、bool等

如下是正規表示式的請求示例:

app.Get("/api/users/{isLogin:bool}", func(context context.Context) {
​
    isLogin, err := context.Params().GetBool("isLogin")
    if err != nil {
        context.StatusCode(iris.StatusNonAuthoritativeInfo)
        return
    }
    if isLogin {
        context.WriteString(" 已登入 ")
    } else {
        context.WriteString(" 未登入 ")
    }
})複製程式碼

中介軟體處理請求路由

當我們在iris框架中說起中介軟體的相關內容時,我們所討論和學習的是在HTTP請求


相關文章