zoukankan      html  css  js  c++  java
  • treemux 基于tree模型的golang http httprouter

    treemux 是一个新的基于tree结构的httprouter

    支持的特性

    • 包装的handler
    • 中间件(handler包装)
    • tree 模式的路由规则
    • 路由组(方便应用扩展)
    • 自定义错误
    • 自定义重定向

    参考使用

    • 参考代码
    package main
    import (
      "fmt"
      "net/http"
      "github.com/vmihailenco/treemux"
    )
    func corsMiddleware(next treemux.HandlerFunc) treemux.HandlerFunc {
      return func(w http.ResponseWriter, req treemux.Request) error {
        if origin := req.Header.Get("Origin"); origin != "" {
          h := w.Header()
          h.Set("Access-Control-Allow-Origin", origin)
          h.Set("Access-Control-Allow-Credentials", "true")
        }
        return next(w, req)
      }
    }
    func main() {
      router := treemux.New()
      group := router.NewGroup("/api")
      group.GET("/v1/:id", func(w http.ResponseWriter, req treemux.Request) error {
        id := req.Param("id")
        fmt.Fprintf(w, "GET /api/v1/%s", id)
        fmt.Fprintf(w, "route: %s", req.Route())
        return nil
      })
      router.Use(corsMiddleware)
      http.ListenAndServe(":8080", router)
    }

    规则说明

    • 请求路径包含:的是一个通配符路径,对应的只一个path
    • 请求路径包含* 是一个匹配所有的,比如 images/*path 可以匹配 images/abc/def
      不会匹配空字符串,如果需要需要配置 /images/

    路由优先级

    1. 静态路径片段具有最高的优先级
    2. 通配符具有次优先级
    3. 然后是匹配所有的

    说明

    从使用上treemux与httprouter是比较相近的,但是treemux在基础上做了一些扩展

    参考资料

    https://github.com/julienschmidt/httprouter
    https://github.com/vmihailenco/treemux

  • 相关阅读:
    来自Ext的UI边界识别函数constrain
    js模拟静态方法
    ExtJs 带参数的MVC
    call
    Ext表单验证
    【Web入门系列】初探HttpServletResponse
    【Web入门系列】初探HttpServletRequest
    【Java入门系列】面向对象特性-多态
    【Java入门系列】final关键字
    【Java入门系列】static关键字
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/13827210.html
Copyright © 2011-2022 走看看