标签: gorilla

如何从处理程序内部通过名称调用路由?

如何从内部处理程序正确引用路径名称?
应该mux.NewRouter()全局分配而不是站在一个功能内吗?

func AnotherHandler(writer http.ResponseWriter, req *http.Request) {
    url, _ := r.Get("home") // I suppose this 'r' should refer to the router
    http.Redirect(writer, req, url, 302)
}

func main() {
    r := mux.NewRouter()
    r.HandleFunc("/", HomeHandler).Name("home")
    r.HandleFunc("/nothome/", AnotherHandler).Name("another")
    http.Handle("/", r)
    http.ListenAndServe(":8000", nil)
}
Run Code Online (Sandbox Code Playgroud)

go mux gorilla

2
推荐指数
1
解决办法
2428
查看次数

我可以将 gorilla 模式与 sql.NullString 一起使用吗?

我正在使用大猩猩模式根据用户的表单提交来填充结构。我的结构包含sql.NullString,目前出现以下错误:

schema: converter not found for sql.NullString

如何在我sql.NullString想要用大猩猩模式填充的结构中使用?

sql schema go gorilla

2
推荐指数
1
解决办法
712
查看次数

在Golang HTTP或Gorilla包中获取路由和参数列表

当我这样编写一个简单的Web应用程序时:

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/about", handler)
    http.ListenAndServe(":8080", nil)
}
Run Code Online (Sandbox Code Playgroud)

如何找到在Web应用程序中定义的路线和参数列表?例如,在此示例中找到“ / about”。

编辑1: 如何获得这一参数和路线?

gorilla.HandleFunc(`/check/{id:[0-9]+}`, func(res http.ResponseWriter, req *http.Request) {
    res.Write([]byte("Regexp works :)"))
})
Run Code Online (Sandbox Code Playgroud)

web-services go gorilla

2
推荐指数
1
解决办法
2315
查看次数

在gorilla/mux框架中使用Go例程

我们正在使用gorilla mux框架来处理Web请求,我想它会在所有cpu核心上自动运行.在这种情况下使用go例程是否有利于cpu密集型进程,例如循环遍历大型对象?

go goroutine gorilla

2
推荐指数
1
解决办法
1160
查看次数

在 HTTP 处理程序中提供子目录服务 [GoLang]

我有以下代码:

r := mux.NewRouter()
r.Handle("/", http.FileServer(http.Dir("./frontend/build/")))
r.Handle("/static", http.FileServer(http.Dir("./frontend/build/static/")))
r.PathPrefix("/api").Handler(auth)
Run Code Online (Sandbox Code Playgroud)

/api应该是安全的。如果用户点击/,我希望他们查看目录index.html中的PROJECTDIR/frontend

前端目录看起来像

frontend
    /build
        index.html
        /static
            /js
            /css
            /media
Run Code Online (Sandbox Code Playgroud)

index.html 加载 中的所有内容/static。无论我如何配置它,当我访问 时localhost:3000,我都可以得到 ,index.html但下面的所有内容/static都是 404。

我如何错误地配置这个?

go gorilla negroni

2
推荐指数
1
解决办法
3169
查看次数

优雅地关闭大猩猩服务器

我正在使用https://github.com/gorilla/mux中的 gorilla多路复用器库构建服务器.问题是,当我使用Ctrl + C或者有特定的API调用时,我希望它能够正常关闭,例如"/ shutdown".

我已经知道在Go 1.8中,已经实现了正常关闭.但是如何将它与大猩猩多路复用器结合起来呢?另外,如何将它与SIGINT信号结合起来?

谁能告诉我怎么做?

webserver channel go sigint gorilla

2
推荐指数
1
解决办法
1927
查看次数

如何使用 gorilla mux 实现不区分大小写的 URL 匹配

我需要在 gorilla mux 中实现不区分大小写的 URL 匹配,因为它是为内置 mux 完成的

我尝试使用这样的中间件来实现相同的目标

router := mux.NewRouter()
router.Use(srv.GetCaseMiddleware())

//GetCaseMiddleware middleware to make match URL case insensitive
func (srv *Server) GetCaseMiddleware() (w mux.MiddlewareFunc) {
    var middleware mux.MiddlewareFunc = func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            r.URL.Path = strings.ToLower(r.URL.Path)
            next.ServeHTTP(w, r)
        })
    }
    return middleware
}
Run Code Online (Sandbox Code Playgroud)

但是如果更改 URL 大小写,它仍然会抛出 404,有什么方法可以使用 gorilla-mux 实现它

go gorilla

2
推荐指数
1
解决办法
910
查看次数

了解Go中的http handlerfunc包装器技术

我看到了Mat Ryer撰写一篇文章,内容涉及如何使用服务器类型和HTTP处理程序类型的包装程序,func(http.ResponseWriter, *http.Request)

我认为这是一种构建REST API的更优雅的方式,但是我完全迷住了使包装器正常运行的想法。我要么在编译时收到类型不匹配的错误,要么在调用时收到404的错误。

这基本上是我目前用于学习的目的。

package main

import(
   "log"
   "io/ioutil"
   "encoding/json"
   "os"
   "net/http"
   "github.com/gorilla/mux"
)

type Config struct {
   DebugLevel int `json:"debuglevel"`
   ServerPort string `json:"serverport"`
}

func NewConfig() Config {

   var didJsonLoad bool = true

   jsonFile, err := os.Open("config.json")
   if(err != nil){
      log.Println(err)
      panic(err)
      recover()
      didJsonLoad = false
   }

   defer jsonFile.Close()

   jsonBytes, _ := ioutil.ReadAll(jsonFile)

   config := Config{}

   if(didJsonLoad){
      err = json.Unmarshal(jsonBytes, &config)
      if(err != nil){
         log.Println(err)
         panic(err)
         recover()
      }
   }

   return config
} …
Run Code Online (Sandbox Code Playgroud)

rest http wrapper go gorilla

2
推荐指数
2
解决办法
2712
查看次数

Gorilla websockets,一个事件中的多条消息

我正在使用来自 gorilla websockets 的聊天应用程序示例,但我有一个问题,有时,当后端需要向客户端发送两条不同的消息时,它们只发送一个消息事件,这对我来说很糟糕,因为 JSON.parse从一个字符串解析 2 个 json 将失败。我可以按换行符进行拆分并从消息中获取每个 json,但我不想这样做。
如果我在后端设置超时,则一切正常。
我可以做些什么来防止这种情况发生吗?如果不是,你能解释一下为什么吗?

这是聊天示例:https : //github.com/gorilla/websocket/tree/master/examples/chat

这是我广播 2 条消息的代码:

if err == nil {
    c.SendMessageWithOrders(DB)
    data := models.EventSuccess{
        Event: utils.EventOrdersCreateSuccess,
    }
    toReturnBytes, err := json.Marshal(data)
    if err == nil {
    toReturn := BroadcastOne{
        ID:      c.ID,
        Message: toReturnBytes,
    }
    NewHub.broadcastOne <- &toReturn
    }
}
Run Code Online (Sandbox Code Playgroud)

c.SendMessageWithOrders(DB)正在NewHub.broadcastOne <- &toReturn使用不同的数据

go websocket gorilla

2
推荐指数
1
解决办法
519
查看次数

如何在 gorilla mux 的 Get Subrouter 中为特定路由使用特定中间件

我对 Gorilla mux 路由有一个特定要求,我想为一个子路由器下的不同路由添加不同的中间件(在我的例子中是 GET 子路由器)。下面是我的路由代码:

    // create a serve mux
    sm := mux.NewRouter()

    // register handlers
    postR := sm.Methods(http.MethodPost).Subrouter()
    postR.HandleFunc("/signup", uh.Signup)
    postR.HandleFunc("/login", uh.Login)
    postR.Use(uh.MiddlewareValidateUser)

    getR := sm.Methods(http.MethodGet).Subrouter()
    getR.HandleFunc("/refresh-token", uh.RefreshToken)
    getR.HandleFunc("/user-profile", uh.GetUserProfile)
Run Code Online (Sandbox Code Playgroud)

在上面的路由器逻辑中,我的 /refresh-token 和 /user-profile 令牌都在 getR 路由器下。我还有两个中间件函数,称为 ValidateAccessToken 和 ValidateRefreshToken。我想将 ValidateRefreshToken 中间件函数用于“/refresh-token”路由,并将 ValidateAccessToken 用于 GET 子路由器下的所有其他路由。我想用 Gorilla mux 路由本身来做到这一点。请建议我完成上述场景的适当方法。感谢您的时间和精力。

routes go gorilla

2
推荐指数
2
解决办法
2384
查看次数

标签 统计

go ×10

gorilla ×10

channel ×1

goroutine ×1

http ×1

mux ×1

negroni ×1

rest ×1

routes ×1

schema ×1

sigint ×1

sql ×1

web-services ×1

webserver ×1

websocket ×1

wrapper ×1