首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以使用多路复用路由来选择处理程序,而不使用针对golang的http listenAndServe?

有没有一种方法可以使用多路复用路由来选择处理程序,而不使用针对golang的http listenAndServe?
EN

Stack Overflow用户
提问于 2017-11-22 08:20:49
回答 2查看 1.6K关注 0票数 6

对于golang来说,有很多多路复用路由器。我找到的所有方法都假设我正在用go构建自己的HTTP服务器。但是,我希望使用aws apigateway作为外部层,并让它将方法、路径、查询参数转发到我与apex一起部署的lambda函数(对于aws lambda函数,请使用填充程序)。所有的API网关端点都将转发到一个lambda函数,这样就减少了需要挂接的内容,如权限等。

因此,我想使用很好的mux库来解析regex或path变量,但在Lambda中使用它们,并能够基于url路径调用正确的处理程序。

大多数多路复用路由器的用法如下:

代码语言:javascript
复制
router := NewRouter()
router.Add("GET", "/my_path/:id", MyHandler)

其中,MyHandler是一种http.HandlerFunc

然后使用类似于http.ListenAndServe(port, router)的命令启动服务器

但是在AWS Lambda中没有要启动的服务器,我只想使用mux来找到我应该调用的处理程序。

EN

回答 2

Stack Overflow用户

发布于 2018-03-20 10:46:13

为此,我创建了一个lib

其基本思想是将作为json对象的网关请求上下文转换为http.Request

票数 2
EN

Stack Overflow用户

发布于 2018-05-24 22:51:28

最常见的方法是使用apex/gateway,它是AWS Lambda上net/http的一个很小的替代品。这是通过使用相同的参数调用开始的。

代码语言:javascript
复制
gateway.ListenAndServe(port, router)

下面是一个示例,展示了它的用法:

代码语言:javascript
复制
func main() {
    http.HandleFunc("/", hello)
    log.Fatal(gateway.ListenAndServe(":3000", nil))
}

func hello(w http.ResponseWriter, r *http.Request) {
    // example retrieving values from the api gateway proxy request context.
    requestContext, ok := gateway.RequestContext(r.Context())
    if !ok || requestContext.Authorizer["sub"] == nil {
        fmt.Fprint(w, "Hello World from Go")
        return
    }

    userID := requestContext.Authorizer["sub"].(string)
    fmt.Fprintf(w, "Hello %s from Go", userID)
}

chi路由器中使用它也是很常见的。

其他一些选项包括:

中列出

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

https://stackoverflow.com/questions/47424899

复制
相关文章

相似问题

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