我有用 golang 编写的 Web 服务器,它使用 graphql 包gqlgen和gorm作为数据库。
\n由于 golang 可以在 Android 上编译和运行,所以我想创建我的应用程序的离线版本,其中 sqlite 可用于离线存储并将我的整个服务器导入为aar。
\n我已经按照此处的说明成功构建了aar并使用 gomobile 将其添加到我的 flutter 上
\n当我运行我的应用程序时,服务器在 Android 上启动,它似乎工作得很好,当http://localhost:8080/在模拟器的 chrome 应用程序上打开时,我看到 graphql 游乐场运行没有任何问题,就像我在 Windows 中的浏览器上看到的那样。
我面临的唯一问题是,当服务器在后台运行时,flutter 应用程序只显示空白屏幕。以下是app启动时打印的日志
\nLaunching 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) 我正在使用gqlgen,并且我想向查询解析器添加一个新方法。添加的方法看起来像这样:
type Query {
...
Foo(bar: Int!): Foo
...
}
Run Code Online (Sandbox Code Playgroud)
的类型Foo已在文件中声明,并且正在正确映射到文件中的模型.go(我知道这一点是因为以前使用该类型的方法)。当我尝试从上面的添加生成代码时,一个新的代码FooResolver被添加到ResolverRoot.
有什么想法为什么会出现这种情况吗?
我在 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在解析器中发送两个?
我是 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出现错误。这是项目设置的第一步,不应导致任何错误。任何人都遇到过同样的问题并知道如何解决它?谢谢
我正在使用杜松子酒和 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)
我已经解决了这个问题,我想在下面回答我自己的问题。
我正在尝试从一对多关系预加载数据,但总是收到“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) 我正在尝试在令牌身份验证中间件中提取 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) 在这种情况下,我正在使用
有没有简单的例子来测试我的 Mutation 和 Query ?我很喜欢得到这方面的建议。我一直在寻找,但至今没有找到,
谢谢你 :)
最近,我一直在将 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)
任何帮助将非常感激!
我正在为我用 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 ×10
gqlgen ×10
graphql ×6
go-gin ×3
flutter ×1
go-context ×1
go-echo ×1
go-generate ×1
go-gorm ×1
gomobile ×1
kotlin ×1
mongo-go ×1
mongodb ×1
postgresql ×1
unit-testing ×1