go - 将 echo.Context 转换为 context.Context

标签 go graphql

我正在编写一个 Web 应用程序,使用 Go 作为后端。我正在使用这个 GraphQL 库 (link)和 Echo Web 框架 (link) .问题在于 graphql-go 库在 Go 中使用了 context 包,而 Echo 使用了自己的自定义上下文,并删除了对标准的 context 包。

我的问题是,在下面的示例中,有没有办法将 context.Context 用作 echo.Context?

api.go
func (api *API) Bind(group *echo.Group) {
    group.Use(middleware.JWTWithConfig(middleware.JWTConfig{
        SigningKey:  []byte("SOME_REAL_SECRET_KEY"),
        SigningMethod:  "HS256",
    }))
    group.GET("/graphql", api.GraphQLHandler)
    group.POST("/query",  echo.WrapHandler(&relay.Handler{Schema: schema}))
}

graphql.go

func (r *Resolver) Viewer(ctx context.Context, arg *struct{ Token *string }) (*viewerResolver, error) {
    token := ctx.Value("user").(*jwt.Token) // oops on this line, graphql-go uses context.Context, but the echo middleware provides echo.Context
    ...
}

我如何使 echo 上下文可用于我的 graphql 解析器。非常感谢,感谢您的帮助。

最佳答案

echo.Context 不能用作 context.Context,但它确实引用一个;如果 c 是回显上下文,那么 c.Request().Context() 是传入请求的 context.Context,它将是例如,如果用户关闭连接,则取消。

如果需要,您可以将其他有用的值从 echo 上下文复制到 stdlib 上下文,一方面使用 Get 方法,另一方面使用 WithValue 方法其他。如果您总是想要复制某些值,那么您可以编写一个辅助函数来执行此操作。

关于go - 将 echo.Context 转换为 context.Context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47843914/

相关文章:

regex - Golang 正则表达式 : Ignore multiple occurrences

java - 用于 Java-GraphQL 服务器的 Java 中基于中继的分页

graphql - 无法解构 {intermediate value} 的属性,因为它未定义

graphql - 如何在 graphql-playground 中更改 websocket url(订阅)

linux - 如何在 Ubuntu 服务器上连续运行 go 应用程序

go - 将字符串解析为特定类型的 int(int8、int16、int32、int64)

google-app-engine - 如何修复Go 1.11模块未知导入路径,找不到提供包的模块?

linux - Go exec.CommandContext 在上下文超时后不会被终止

graphql - 不能为不可为空的字段返回空值,调试器不显示空值

javascript - Apollo 服务器+ Sequelize 错误不可为空的字段