wil*_*aba 8 mongodb node.js graphql
我正在尝试创建一个 graphql 突变来用其他对象数组更新对象字段。这是我的架构:
type Guide {
_id: ID!
first_name: String!
last_name: String
email: String!
phone: String!
creator: User!
}
input GuideInput {
_id: ID!
first_name: String!
last_name: String
email: String!
phone: String!
}
type Trip {
_id: ID!
name: String!
description: String
location: String
start_date: String
start_time: String
duration: Int
creator: User!
guides: [Guide!]
guests: [Guest!]
}
input TripInput {
name: String
description: String
location: String
start_date: String
start_time: String
duration: Int
guides: [GuideInput]
}
type RootQuery {
trips: [Trip!]
guides: [Guide!]
}
type RootMutation {
updateTrip(tripId: ID!, tripInput: TripInput): Trip
deleteTrip(tripId: ID!): Trip
createGuide(guideInput: GuideInput): Guide
deleteGuide(guideId: ID!): Guide
}
schema {
query: RootQuery
mutation: RootMutation
}
Run Code Online (Sandbox Code Playgroud)
我的查询如下所示:
const requestBody = {
query: `
mutation {
updateTrip(
tripId: "${tripId}",
tripInput: {
guides: ${guides}
}
) {
guides {
first_name
last_name
}
}
}
`
}
Run Code Online (Sandbox Code Playgroud)
当我执行此请求时出现的错误是:
Expected type GuideInput, found object.
Expected type GuideInput, found Object.
Run Code Online (Sandbox Code Playgroud)
我将一个对象数组传递到与 GuideInput 对象形状相同的突变中,所以我很困惑。先感谢您!
您不能以这种方式将输入传递到查询中。当您使用带有占位符的模板文字时,占位符 ( ) 内的表达式的结果${guides}将被视为字符串。如果guides是一个对象(如果它是一个数组,那么它就是一个对象),它就toString()调用了它,这会产生字符串[object Object]。您最终会得到一个如下所示的字符串:
tripInput: {
guides: [object Object]
}
Run Code Online (Sandbox Code Playgroud)
在查询中替换值的正确方法是使用变量并完全避免使用占位符。然后你requestBody会看起来像这样:
tripInput: {
guides: [object Object]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6982 次 |
| 最近记录: |