dongshan1959 2015-11-12 02:21
浏览 30
已采纳

中间件将针对每个请求执行,而无需指定安装路径

Node.js Express can insert a middleware with no mount path, and it gets executed for every request. Is there a way to accomplish that in GO?

var app = express();

// a middleware with no mount path; gets executed for every request to the app
app.use(function (req, res, next) {
  console.log('Time:', Date.now());
  next();
});
  • 写回答

1条回答 默认 最新

  • douhan0562 2015-11-12 06:58
    关注

    Here's a basic example with Go's net/http:

    func main() {
       r := http.NewServeMux()
       r.HandleFunc("/some-route", SomeHandler)
    
       // Wrap your *ServeMux with a function that looks like
       // func SomeMiddleware(h http.Handler) http.Handler   
       http.ListenAndServe("/", YourMiddleware(r))
    }
    

    Middleware might be something like this:

    func YourMiddleware(h http.Handler) http.Handler {
       fn := func(w http.ResponseWriter, r *http.Request) {
           // Do something with the response
           w.Header().Set("Server", "Probably Go")
           // Call the next handler
           h.ServeHTTP(w, r)
       }
    
       // Type-convert our function so that it
       // satisfies the http.Handler interface
       return http.HandlerFunc(fn)
    }
    

    If you have a lot of middleware you want to chain, a package like alice can simplify it so you're not Wrapping(AllOf(YourMiddleware(r)))) like that. You could also write your own helper -

    func use(h http.Handler, middleware ...func(http.Handler) http.Handler) http.Handler {
        for _, m := range middleware {
            h = m(h)
        }
        return h
    }
    
    // Example usage:
    defaultRouter := use(r, handlers.LoggingHandler, csrf.Protect(key), CORSMiddleware)
    http.ListenAndServe(":8000", defaultRouter)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 请问为什么我配置IPsec后PC1 ping不通 PC2,抓包出来数据包也并没有被加密
  • ¥200 求博主教我搞定neo4j简易问答系统,有偿
  • ¥15 nginx的使用与作用
  • ¥100 关于#VijeoCitect#的问题,如何解决?(标签-ar|关键词-数据类型)
  • ¥15 一个矿井排水监控系统的plc梯形图,求各程序段都是什么意思
  • ¥50 安卓10如何在没有root权限的情况下设置开机自动启动指定app?
  • ¥15 ats2837 spi2从机的代码
  • ¥200 wsl2 vllm qwen1.5部署问题
  • ¥100 有偿求数字经济对经贸的影响机制的一个数学模型,弄不出来已经快要碎掉了
  • ¥15 数学建模数学建模需要