首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中间件未被`alice`调用

中间件未被`alice`调用
EN

Stack Overflow用户
提问于 2015-02-23 22:55:13
回答 2查看 459关注 0票数 0

alice似乎是一个很好的中间件链接,我在这里尝试将它与httprouter一起使用,但只有外层/最后一个中间件被调用:

代码语言:javascript
复制
package main

import (
    "fmt"
    "github.com/julienschmidt/httprouter"
    "github.com/justinas/alice"
    "net/http"

    "log"
    "time"
)

func main() {
    fmt.Println("started ", time.Now())

    c := alice.New(S1, S2, S3).Then(nil)

    router := httprouter.New()
    router.Handler("GET", "/app", c)

    http.ListenAndServe(":27007", router)
}

func S1(h http.Handler) http.Handler {
    var x H1
    return &x
}

func S2(h http.Handler) http.Handler {
    var x H2
    return &x
}

func S3(h http.Handler) http.Handler {
    var x H3
    return &x
}

type H1 struct{}

func (h *H1) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
    log.Println("H1", time.Now())
}

type H2 struct{}

func (h *H2) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
    log.Println("H2")
}

type H3 struct{}

func (h *H3) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
    log.Println("H3")
}
EN

回答 2

Stack Overflow用户

发布于 2015-02-24 01:48:39

您的中间件处理程序需要在准备好时调用下一个处理程序。未经测试的示例:

代码语言:javascript
复制
func S1(h http.Handler) http.Handler {
    return &H1{next: h}
}

type H1 struct{
    next http.Handler
}

func (h *H1) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
    log.Println("H1", time.Now())
    h.next.ServeHTTP(rw, req)
}

或者:

代码语言:javascript
复制
func S1(next http.Handler) http.Handler {
    return http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
        log.Println("H1", time.Now())
        next(rw, req)
    })
}

关于中间件的另一个例子,请看http://golang.org/src/net/http/server.go?s=37638:37688#L1280

票数 1
EN

Stack Overflow用户

发布于 2015-02-24 05:27:02

向每个中间件传递一个您执行的http.Handler结构。这允许每个中间件不知道处理程序的顺序,它们只关心执行链中的下一个处理程序。顺序是在启动Alice时定义的。请参见:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28676536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档