graphql JS возвращает null, когда я отправляю запрос через graphiql

Я думаю, что тщательно проверил этот код, но не могу найти ошибку, пожалуйста, помогите! Я получаю нулевой результат при запросе идентификатора

Кроме того, vscode сообщает мне, что мой родитель в функции разрешения не используется. Что я здесь делаю не так??

выражать ---

const express = require('express');
const graphqlHTTP = require('express-graphql');
const schema = require('./schema/schema')

const app = express();

app.use('/graphql', graphqlHTTP({

  schema,
  graphiql:true

}));


app.listen(1991, ()=> {
   console.log('1991 live');
});

схема --

const graphql = require('graphql');
const _= require('lodash');

const { GraphQLObjectType, GraphQLString, GraphQLID, GraphQLInt, 
GraphQLSchema } = graphql;

var drugs = [

{name: 'Paracetamol', price: 200, qty: 20, drugid: 1},
{name: 'Amoxicilin', price: 700, qty: 10, drugid: 2}

];

var categories = [

{name: 'Painkiller', id: 1},
{name: 'Anti-Biotic', id: 2}

];


const DrugType = new GraphQLObjectType({

name: 'Drug',
fields: () => ({
    name: {type: GraphQLString},
    price: {type: GraphQLInt},
    qty: {type: GraphQLInt},
    drugid: {type: GraphQLID}
  })

});

const DrugCategory = new GraphQLObjectType({

name: 'Category',
fields: () => ({
    name: {type: GraphQLString},
    id: {type: GraphQLID}
  })

});

const RootQuery = new GraphQLObjectType({

name: 'RootQueryType',
fields: {
    drug:{
        type: DrugType,
        args:{id:{type: GraphQLID}},
        resolve(parent, args){
           return _.find(drugs, {drugid:args.id});

        }
    },

    category:{
        type: DrugCategory,
        args:{id: {type: GraphQLID}},
        resolve(parent,args){
            return _.find(categories, {id:args.id});
          }
      }
  }

});

module.exports = new GraphQLSchema({
  query: RootQuery
});

это результат, который я получаю, когда делаю запрос в graphiql

запрос --

 {
 drug(id: 1){
   name
 }

}

результат --

{
 "data": {
   "drug": null
  }
}

person Prof3ssa    schedule 03.10.2018    source источник
comment
Возможный дубликат Почему запрос GraphQL возвращает значение null?   -  person Daniel Rearden    schedule 01.06.2019


Ответы (1)


Объект, который вы передаете методу find lodash, равен { id: args.id } — это означает, что вы ищете объект со свойством id, которое соответствует args.id. Однако ни один из объектов в вашем массиве drugs не имеет свойства id. Либо обновите свой массив, либо измените критерии поиска (например, { drugid: args.id }).

Кроме того, типом аргумента id является GraphQLID, который обрабатывается как строка. Это означает, что find сравнивает аргумент String со значением свойства Number. Либо измените тип аргумента на GraphQLInt, или заверните args.id в Number.parseInt, или измените значения drugId на строки.

person Daniel Rearden    schedule 03.10.2018
comment
я обновил метод lodash, но после запроса я все еще получаю null, до того, как я добавил drugid, он был просто {id:args.id} и все еще не работал. вы думаете, что я что-то еще упускаю ?? - person Prof3ssa; 03.10.2018
comment
Как выглядит ваш новый вызов метода? - person Daniel Rearden; 03.10.2018
comment
Я обновил код в вопросе, но теперь он выглядит так.. return _.find(drugs, {drugid:args.id}); - person Prof3ssa; 03.10.2018
comment
Упс. Только что заметил, что тип вашего аргумента - GraphQLID. Пожалуйста, смотрите обновленный ответ. - person Daniel Rearden; 03.10.2018
comment
после перехода на строку я не получаю ошибку TypeError: Failed to fetch при запросе .. боже мой, у меня от этого настоящая головная боль .. - person Prof3ssa; 03.10.2018
comment
ЭТО СРАБОТАЛО!!!!!! .. большое спасибо чувак .. я не перезапустил сервер, поэтому я получил ошибку не удалось получить - person Prof3ssa; 03.10.2018
comment
можете ли вы показать мне пример кода того, как я могу обернуть его Number.parseInt .. я уже благодарен за ваш вклад. - person Prof3ssa; 03.10.2018
comment
Вот что я сделал, чтобы ваш код заработал: return _.find(drugs, {drugid: Number.parseInt(args.id)}) - person Daniel Rearden; 03.10.2018
comment
БЛАГОДАРЮ ВАС!! Вы одновременно вылечили мою головную боль. - person Prof3ssa; 03.10.2018