标签: gqlgen

使用 flutter 嵌入 golang 服务器

我有用 golang 编写的 Web 服务器,它使用 graphql 包gqlgengorm作为数据库。

\n

由于 golang 可以在 Android 上编译和运行,所以我想创建我的应用程序的离线版本,其中 sqlite 可用于离线存储并将我的整个服务器导入为aar

\n

我已经按照此处的说明成功构建了aar并使用 gomobile 将其添加到我的 flutter 上

\n

当我运行我的应用程序时,服务器在 Android 上启动,它似乎工作得很好,当http://localhost:8080/在模拟器的 chrome 应用程序上打开时,我看到 graphql 游乐场运行没有任何问题,就像我在 Windows 中的浏览器上看到的那样。

\n

我面临的唯一问题是,当服务器在后台运行时,flutter 应用程序只显示空白屏幕。以下是app启动时打印的日志

\n
Launching lib\\main.dart on sdk gphone64 x86 64 in debug mode...\nRunning Gradle task \'assembleDebug\'...\n\xe2\x88\x9a  Built build\\app\\outputs\\flutter-apk\\app-debug.apk.\nInstalling build\\app\\outputs\\flutter-apk\\app.apk...\nDebug service listening on ws://127.0.0.1:62561/DyGpOhyuekw=/ws\nSyncing files to device sdk gphone64 x86 64...\nI/GoLog   ( 6295): connect to http://localhost:8080/ for GraphQL playground\nW/ux.offline( …
Run Code Online (Sandbox Code Playgroud)

go kotlin flutter gomobile gqlgen

10
推荐指数
1
解决办法
1098
查看次数

gqlgen:生成了不需要的解析器

我正在使用gqlgen,并且我想向查询解析器添加一个新方法。添加的方法看起来像这样:

type Query {
...
Foo(bar: Int!): Foo
...
}
Run Code Online (Sandbox Code Playgroud)

的类型Foo已在文件中声明,并且正在正确映射到文件中的模型.go(我知道这一点是因为以前使用该类型的方法)。当我尝试从上面的添加生成代码时,一个新的代码FooResolver被添加到ResolverRoot.

有什么想法为什么会出现这种情况吗?

go graphql go-generate gqlgen

6
推荐指数
0
解决办法
342
查看次数

Golang mongodb 构建引用关系

我在 graphql 中与 Mongo go 驱动程序有这种一对多的引用关系。

type User {
    id: ObjectID!
    email: String!
    username: String!
    posts: [Post!]!
}

type Post {
    id: ObjectID!
    author: User!
    title: String!
    content: String!
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用Aggregate框架来查询引用关系。

但是,如果我想创建用户同时也创建帖子怎么办?

collection.InsertOne在解析器中发送两个?

go mongodb mongo-go gqlgen

6
推荐指数
0
解决办法
586
查看次数

gqlgen - DirectiveResolver 未通过生成的包导出

我是 GraphQL、gqlgen 库的新手。尝试运行go run github.com/99designs/gqlgen init命令但validation failed: packages.Load: C:\Users\Aylin\Desktop\gqlgen-tutorial\graph\prelude.resolvers.go:19:44: __DirectiveResolver not exported by package generated出现错误。这是项目设置的第一步,不应导致任何错误。任何人都遇到过同样的问题并知道如何解决它?谢谢

go graphql gqlgen

5
推荐指数
1
解决办法
1459
查看次数

gqlgen 从解析器设置 cookie

我正在使用杜松子酒和 gqlgen。我需要从解析器设置 cookie,但我的解析器中只有上下文和来自 graphQL 的输入。这个问题已经在github中得到了解答。ctx.Writer.Write但这一个不同,因为当你尝试传递时我无法改变,也什么也做不了ctx.Next。因为gin不是那样工作的。

func (r *mutationResolver) Login(ctx context.Context, email string, password string) (bool, error) {
        // You need ctx.Writer to set a cookie and can't access that from here
}
Run Code Online (Sandbox Code Playgroud)

我已经解决了这个问题,我想在下面回答我自己的问题。

go go-gin gqlgen

4
推荐指数
1
解决办法
2078
查看次数

Gorm 中不支持的关系

我正在尝试从一对多关系预加载数据,但总是收到“ApiKeys:模式客户端不支持的关系”错误。(结构是指针的原因是因为我正在使用 gqlgen 并且这是默认配置)

type Client struct {
    //  Client ID
    ID int `json:"id"`
    UserName string `json:"userName"`
    //  Client login hashed password
    Password string `json:"password"`
    //  ApiKeys
    APIKeys []*APIKey `json:"apiKeys"`
}
    
type APIKey struct {
    //  ApiKey Index
    ID int `json:"id"`
    //  ApiKey Value
    Key string `json:"key"`
    //  ApiKey Client Relation
    ClientID int `json:"clientID"`
    //  ApiKey Client Info
    Client *Client `json:"client"`
}
Run Code Online (Sandbox Code Playgroud)

这是调用ApiKeys Preload 的函数。

func (r *queryResolver) ClientInfoResolver(username string, password string) (*model.Client, error) {
    var clients []*model.Client
    var client *model.Client …
Run Code Online (Sandbox Code Playgroud)

postgresql go go-gorm gqlgen

4
推荐指数
1
解决办法
1万
查看次数

如何将上下文值从 Gin 中间件传播到 gqlgen 解析器?

我正在尝试在令牌身份验证中间件中提取 user_id 并将其传递给gqlgen的 graphql 解析器函数(以填充 GraphQL 架构的created_by 和updated_by 列)。身份验证部分工作没有任何问题。

Gin 中间件:

    var UID = "dummy"
    func TokenAuthMiddleware() gin.HandlerFunc {
        return func(c *gin.Context) {
            err := auth.TokenValid(c.Request)
            if err != nil {
                c.JSON(http.StatusUnauthorized, "You need to be authorized to access this route")
                c.Abort()
                return
            }
            //
            UID, _ = auth.ExtractTokenID(c.Request)
            //c.Set("user_id", UID)
            
            c.Next()
        }
    }

    func GetUID() string {
        return UID
    }
Run Code Online (Sandbox Code Playgroud)

graphql 解析器:

    var ConstID = middleware.GetUID()
    
    func (r *mutationResolver) CreateFarmer(ctx context.Context, input model.NewFarmer) (*model.Farmer, error) {
        //Fetch …
Run Code Online (Sandbox Code Playgroud)

go graphql go-gin gqlgen go-context

4
推荐指数
1
解决办法
3487
查看次数

在 Golang 中对 GraphQL 进行单元测试

在这种情况下,我正在使用

有没有简单的例子来测试我的 Mutation 和 Query ?我很喜欢得到这方面的建议。我一直在寻找,但至今没有找到,

谢谢你 :)

unit-testing go graphql go-echo gqlgen

2
推荐指数
1
解决办法
1843
查看次数

使用 gqlgen + go gin 自定义错误状态代码

最近,我一直在将 GO REST API 更新为graphQl API,但遇到了无法使用 gqlgen 自定义状态代码的问题。

我得到的回应

标头

Status Code: 200 OK
Run Code Online (Sandbox Code Playgroud)
{ 
data: null,
errors: [
  {message: "Unauthorized access", path: ["..."]}
]
}
Run Code Online (Sandbox Code Playgroud)

预期标题

Status Code: 401 UNAUTHORISED
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激!

error-handling go graphql go-gin gqlgen

2
推荐指数
1
解决办法
2541
查看次数

有条件地将多个属性分配给结构的正确方法是什么

我正在为我用 Go 编写的 BE 的 GraphQL 查询开发一个解析器函数。在解析器中,我有想要更新的用户数据,使用包含多个可能的更新属性的输入值。

在 JavaScript 中,这可以通过解构(伪)快速完成:

const mergedObj = {...oldProps, ...newProps}

目前,我的解析器函数如下所示(使用 gqlgen 作为 GraphQL Go 解析器):

func (r *mutationResolver) ModifyUser(ctx context.Context, input *model.ModifyUserInput) (*model.User, error) {
    id := input.ID
    us, ok := r.Resolver.UserStore[id]
    if !ok {
        return nil, fmt.Errorf("not found")
    }

    if input.FirstName != nil {
        us.FirstName = *input.FirstName
    }

    if input.LastName != nil {
        us.LastName = *input.LastName
    }

    if input.ProfileImage != nil {
        us.ProfileImage = input.ProfileImage
    }

    if input.Password != nil {
        us.Password = …
Run Code Online (Sandbox Code Playgroud)

go conditional-statements graphql gqlgen

0
推荐指数
1
解决办法
164
查看次数