我已经建立了以下Graphql模式,但是我无法弄清楚如何为一些虚假数据建立JS对象。有人可以帮我弄清楚我在做什么错吗?
// GraphQL schema
const schema = buildSchema(`
type Query {
apps: [App]
}
type App {
id: ID!
show: Show
name: String
url: String
author: String
price: Float
image: String
}
type Show {
id: ID!
name: String
airDate: String
users: [User]
}
type User {
id: ID
name: String
email: String
}
`);
这是我嘲笑的东西,但它不起作用
module.exports = {
apps: [
{
id: 1,
show: 1,
name: 'App 1',
url: 'http://google.com',
author: 'John',
price: '0.00',
image: 'http://img.vibethemes.com/VeryVibe-125x125.png'
},
{
id: 2,
show: 1,
name: 'App 2',
url: 'http://yahoo.com',
author: 'Bob',
price: '2.99',
image: 'http://img.vibethemes.com/VeryVibe-125x125.png'
}
],
shows: [
{
id: 1,
name: 'This is a cool show'
}
]
}
但这给我一个错误。我认为也许我在某个地方输入了错误的属性名称。感谢您的帮助
答案 0 :(得分:0)
您的架构show
类型中的App
字段直接引用了另一种类型,即Show
类型;但是,您的JS模拟数据仅包含对show对象的id
引用。
这里确实有两个选择(如果您绝对对这种模式和JS数据有所了解):
保持架构不变,但是更改JS数据以遵循这样的架构定义,也许是这样:
module.exports = {
apps: [
{
id: 1,
show: {
id: 1,
name: 'This is a cool show'
},
name: 'App 1',
url: 'http://google.com',
author: 'John',
price: '0.00',
image: 'http://img.vibethemes.com/VeryVibe-125x125.png'
}, // etc. etc.
由于您是直接通过show: Show
引用架构中的对象,因此实际上需要为架构提供适当嵌套的数据结构。应当注意,对于这种特定的数据结构(取决于您的实现),您可能需要向App.show
添加一个简单的字段级解析器,以适当地返回嵌套的Show
数据。
如果您不需要访问有关Show
对象的信息,而只需要一个id
来引用以供将来查询,则可以将模式更改为只需要一个简单的{{ 1}}作为ID
的类型解析度:
App.show
在某些情况下,能够深入挖掘嵌套数据是有意义的,但是,如果您真的不需要这样做,就不要给自己做额外的工作。
总而言之,希望对您有所帮助。
答案 1 :(得分:0)
也许您可以使用easygraphql来解决这一挑战!可以使用多个软件包:
easygraphql-mock:如果您想返回该类型的完整模拟,则可以使用此包,并且不必为此创建每种夹具。
easygraphql-tester:类似于easygraphql-mock,但不同之处在于您可以返回查询的模拟,请检查docs