graphql - 在 graphQL 查询中传递参数
问题描述
我刚刚开始学习 GraphQL,目前正在尝试创建 twitter 的克隆。在下面的代码中,有没有一种方法可以将 id 参数(例如 user(id: 81))中的 81 自动传递给 userId 参数(例如 tweets(userId: 81))?
我在下面复制了我的代码
{
user(id: 81) {
username
email
tweets(userId: 81) {
content
}
}
}
用户类型.rb
module Types
class UserType < Types::BaseObject
field :username, String, null: false
field :email, String, null: false
field :bio, String, null: true
field :tweets, [Types::TweetType], null: true do
argument :user_id, ID, required: true
end
def tweets(user_id:)
Tweet.where(user_id: user_id)
end
end
end
tweet_type.rb
module Types
class TweetType < Types::BaseObject
field :id, ID, null: false
field :content, String, null: false
field :userId, ID, null: false
field :createdAt, GraphQL::Types::ISO8601DateTime, null: false
field :user, Types::UserType, null: false
end
end
查询类型.rb
module Types
class QueryType < Types::BaseObject
field :tweets,
[Types::TweetType],
null: false,
description: "Returns a list of all tweets"
field :user,
Types::UserType,
null: false,
description: "Returns a list of all users" do
argument :id, ID, required: true
end
def tweets
Tweet.all
end
def user(id:)
User.find(id)
end
end
end
解决方案
GraphQL 有一种一流的方法来将动态值从查询中分解出来,并将它们作为单独的字典(变量)传递。您将使用类似于下面的语法,并且可以在此处阅读更多相关信息。
query User($id: Int) {
user(id: $id) {
username
email
tweets(userId: $id) {
content
}
}
}
推荐阅读
- javascript - 如何每“N”分钟将 Electron 应用程序带到前台?
- javascript - 通过单击 vue3 中的 div 标签获取 innerHTML
- applescript - 升级到 Monterey 后更改键盘布局 AppleScript 停止工作
- node.js - 在没有瀑布打印或清除控制台的情况下在 js 终端中重新打印表格
- azure - 部署“keda-operator”无效:spec.selector:无效值:字段不可变
- c# - 尝试为目标用户传输文件
- python - Python作业不工作 - 收到错误
- javascript - 如何通过 Puppeteer 在 iframe 中使用输入表单?
- web-scraping - 使用 requests-html 呈现页面时,我可以只呈现特定的 javascript 吗?
- python - 烧瓶没有为ajax调用提供结果