首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fasthttp +极品,试图编写中间件

Fasthttp +极品,试图编写中间件
EN

Stack Overflow用户
提问于 2016-07-24 23:23:42
回答 2查看 7.9K关注 0票数 5

目前,我正在尝试编写一些中间件,以便与fasthttp和fasthttp一起工作。我被困住了。

代码语言:javascript
复制
func jwt(h fasthttprouter.Handle) fasthttprouter.Handle {
myfunc := func(ctx *fasthttp.RequestCtx, _ fasthttprouter.Params) {
    fmt.Println(string(ctx.Request.Header.Cookie("Authorization")))
}

return myfunc
}

现在如何运行实际的处理程序?我觉得我错过了一些很简单的东西。

我读过这篇博文:Golang中间件。但我迷路了。

有什么想法吗?

问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-25 19:39:06

例如,让我们创建一个中间件函数,它将使用以下方法处理CORS:

https://github.com/buaazp/fasthttprouterhttps://github.com/valyala/fasthttp

代码语言:javascript
复制
var (
    corsAllowHeaders     = "authorization"
    corsAllowMethods     = "HEAD,GET,POST,PUT,DELETE,OPTIONS"
    corsAllowOrigin      = "*"
    corsAllowCredentials = "true"
)

func CORS(next fasthttp.RequestHandler) fasthttp.RequestHandler {
    return func(ctx *fasthttp.RequestCtx) {

        ctx.Response.Header.Set("Access-Control-Allow-Credentials", corsAllowCredentials)
        ctx.Response.Header.Set("Access-Control-Allow-Headers", corsAllowHeaders)
        ctx.Response.Header.Set("Access-Control-Allow-Methods", corsAllowMethods)
        ctx.Response.Header.Set("Access-Control-Allow-Origin", corsAllowOrigin)

        next(ctx)
    }
}

现在,我们将这个中间件函数链接到索引处理程序上,并在路由器上注册它。

代码语言:javascript
复制
func Index(ctx *fasthttp.RequestCtx) {
    fmt.Fprint(ctx, "some-api")
}

func main() {
    router := fasthttprouter.New()
    router.GET("/", Index)

    if err := fasthttp.ListenAndServe(":8181", CORS(router.Handler)); err != nil {
        log.Fatalf("Error in ListenAndServe: %s", err)
    }
}
票数 19
EN

Stack Overflow用户

发布于 2018-05-29 11:43:15

fasthttp的auth中间件示例& fasthttprouter (新版本)

代码语言:javascript
复制
type Middleware func(h fasthttp.RequestHandler) fasthttp.RequestHandler
type AuthFunc func(ctx *fasthttp.RequestCtx) bool
func NewAuthMiddleware(authFunc AuthFunc) Middleware {
    return func(h fasthttp.RequestHandler) fasthttp.RequestHandler {
        return func(ctx *fasthttp.RequestCtx) {
            result, err: = authFunc(ctx)
            if result {
                h(ctx)
            } else {
                ctx.Response.SetStatusCode(fasthttp.StatusUnauthorized)
            }
        }
    }
}

func AuthCheck(ctx *fasthttp.RequestCtx)(bool, error) {
    return false; // for example ;)
}

// router
authMiddleware: = middleware.NewAuthMiddleware(security.AuthCheck)
    ...
router.GET("/protected", authMiddleware(handlers.ProtectedHandler))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38557843

复制
相关文章

相似问题

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