go - 在 golang 中使用 chi 中间件时无法运行 Controller

标签 go middleware go-chi

我正在使用 chi 在 golang net/http 中编写一个中间件函数,但 Controller 函数没有被执行(无法在函数中打印 1)。

调用中间件:

r.With(myMiddleware.Authware).Post("/tryon", mainController.Tryon)

包 - myMiddleware

func Authware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Middleware code
    })
}

包 - mainController

func Tryon(w http.ResponseWriter, r *http.Request) {
    // Dosent print anything
    log.Println(1)
}

我阅读了文档,但没有多大帮助

您能帮忙调试一下并告诉我为什么会发生这种情况吗?另外,如果我想从中间件返回一些数据到 Controller ,我该怎么做?

最佳答案

main.go

func main() {
    r := chi.NewRouter()
    r.With(middle.Authware).Post("/tryon", controller.Tryon)
    http.ListenAndServe(":3000", r)
}

传递中间件逻辑后调用 Controller :

中间件.go

func Authware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Middleware code
        next.ServeHTTP(w, r)
    })
}

Controller .go

func Tryon(w http.ResponseWriter, r *http.Request) {
    // Doesn't print anything
    log.Println(1)
}

如果您确实希望它是一个 POST 请求:curl -X POST localhost:3000/tryon

P.S:查看此处的代码示例:https://github.com/go-chi/chi

关于go - 在 golang 中使用 chi 中间件时无法运行 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73346070/

相关文章:

go - 如何从 varnish 子程序调用 Go 程序

go - 停止HTTP调用并使用一系列处理程序返回错误;可能吗?

ios - IOS/Linux 应用程序中的通信架构选择?

c++ - 网络服务调度员

mysql - 带有 url 参数的 go chi 路由器和 mysql 数据库无法正常工作

http - 检查来自应用程序的 Internet 连接

google-app-engine - 如何使用 "Put"获取 key 进入 RunInTransaction 而不是等到交易之后

go - 编译器可以推断出 'package' 关键字的用途是什么?

go - 如何使用 Chi 路由器提供静态文件夹服务

http - 如何在 go-chi 中启用 gzip 压缩中间件