Невозможно установить свойство 'name' из undefined (Nodejs Graphql) - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь изучить Graphql, создав простое приложение Node с некоторыми фиктивными данными для тестирования.

Когда я пытаюсь запустить 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
});

Кто-нибудь из вас может заметить ошибку?Заранее спасибо.

1 Ответ

0 голосов
/ 30 января 2019

при создании объекта RootQuery вы просто пропустили ключевое слово «new» для класса GraphQLObjectType.Я исправил это, пожалуйста, посмотрите


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
});
...