我正在尝试通过制作一个简单的Node应用程序并测试一些虚拟数据来学习Graphql。
当我尝试运行Node时,出现以下错误
TypeError: Cannot set property 'name' of undefined
at GraphQLObjectType (/Users/BorisGrunwald/Desktop/programmering/Javascript/Node/graphQLServer/server/node_modules/graphql/type/definition.js:480:15)
at Object.<anonymous> (/Users/BorisGrunwald/Desktop/programmering/Javascript/Node/graphQLServer/server/schema/schema.js:22:23)
at Module._compile (internal/modules/cjs/loader.js:721:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
at Module.load (internal/modules/cjs/loader.js:620:32)
at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
at Function.Module._load (internal/modules/cjs/loader.js:552:3)
at Module.require (internal/modules/cjs/loader.js:657:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object.<anonymous> (/Users/BorisGrunwald/Desktop/programmering/Javascript/Node/graphQLServer/server/app.js:6:20)
这些是我项目中仅有的两个文件:
app.js
const express = require('express');
const graphqlHTTP = require('express-graphql');
const app = express();
const schema = require('./schema/schema');
app.use('/graphql',graphqlHTTP({
schema
}));
app.listen(4000,() => {
console.log('listening on port 4000');
});
schema.js
const graphql = require('graphql');
const { GraphQLObjectType, GraphQLString, GraphQLSchema } = graphql;
const dummyData = [
{name: 'Name of the Wind', genre: 'Fantasy', id:'1'},
{name: 'The Final Empire', genre: 'Fantasy', id:'2'},
{name: 'The Long Earth', genre: 'Sci-Fi', id:'3'}
];
const BookType = new GraphQLObjectType({
name:'Book',
fields: () => ({
id: {type : GraphQLString},
name: {type: GraphQLString},
genre: {type: GraphQLString}
})
});
const RootQuery = GraphQLObjectType({
name:'RootQueryType',
fields: {
book:{
type:'BookType',
args: {id:{type:GraphQLString}},
resolve(parent,args) {
return dummyData.find(book => book.id === args.id)
}
}
}
});
module.exports = new GraphQLSchema({
query:RootQuery
});
任何人都可以发现错误吗?预先感谢。
答案 0 :(得分:2)
在创建RootQuery对象时,您只是错过了GraphQLObjectType类的“ new”关键字。 我已经修复,请看看
const graphql = require('graphql');
const { GraphQLObjectType, GraphQLString, GraphQLSchema } = graphql;
const dummyData = [
{name: 'Name of the Wind', genre: 'Fantasy', id:'1'},
{name: 'The Final Empire', genre: 'Fantasy', id:'2'},
{name: 'The Long Earth', genre: 'Sci-Fi', id:'3'}
];
const BookType = new GraphQLObjectType({
name:'Book',
fields: () => ({
id: {type : GraphQLString},
name: {type: GraphQLString},
genre: {type: GraphQLString}
})
});
const RootQuery = new GraphQLObjectType({
name:'RootQueryType',
fields: {
book:{
type:'BookType',
args: {id:{type:GraphQLString}},
resolve(parent,args) {
return dummyData.find(book => book.id === args.id)
}
}
}
});
module.exports = new GraphQLSchema({
query:RootQuery
});