Есть ли способ избавиться от [Object: null prototype] в GraphQL - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь создать базу данных отношений один-ко-многим с Mongoose и GraphQL.

Всякий раз, когда я вставляю данные в аргумент мутации graphql, я получаю ошибку [Object: null prototype]

Я заметил, что объект будет иметь [Object: null prototype] перед ним, когда я попытался console.log для целей отладки.

Я пробовал много способов, пытался отобразить () аргументы или дажеиспользовать replace (), но не повезло.Все, что я получаю, это «args.ingredient.map/replace не является функцией»

Я тестировал жестко запрограммированный метод, меняя аргументы, например

args.category = '5c28c79af62fad2514ccc788'
args.ingredient = '5c28c8deb99a9d263462a086'

Удивительно, но он работает сэтот метод, я предполагаю, что входные данные не могут быть объектом, а просто идентификатором.

Фактические результаты приведены ниже.

Resolvers

Query: {
    recipes: async (root, args, { req }, info) => {
        return Recipe.find({}).populate('ingredient category', 'name createdAt').exec().then(docs => docs.map(x => x))
    },
},
Mutation: {
    addRecipe: async (root, args, { req }, info) => {
      // args.category = '5c28c79af62fad2514ccc788'
      // args.ingredient = '5c28c8deb99a9d263462a086'
      // console.log(args.map(x => x))
      return Recipe.create(args)
    }
}

TypeDef

extend type Mutation {
    addRecipe(name: String!, direction: [String!]!, ingredient: [IngredientInput], category: [CategoryInput]): Recipe
}

type Recipe {
    id: ID!
    name: String!
    direction: [String!]!
    ingredient: [Ingredient!]!
    category: [Category!]!
}

input IngredientInput {
    id: ID!
}

input CategoryInput {
    id: ID!
}

Модели

const recipeSchema = new mongoose.Schema({
    name: String,
    direction: [String],
    ingredient: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Ingredient' }],
    category: { type: mongoose.Schema.Types.ObjectId, ref: 'Category' }
}, {
    timestamps: true // createdAt, updateAt
})

const Recipe = mongoose.model('Recipe', recipeSchema)

Это результат, который я консоль записываю в журнал аргументы при вставке данных

{ 
    name: 'Butter Milk Chicken TEST2',
    direction: [ 'Step1', 'Step2', 'Step3' ],
    ingredient:[[Object: null prototype] { id: '5c28c8d6b99a9d263462a085' }],
    category: [[Object: null prototype] { id: '5c28c79af62fad2514ccc788' }]
}

Я предполагаю, что мне нужно получить что-то вроде этого

{ 
    name: 'Butter Milk Chicken TEST2',
    direction: [ 'Step1', 'Step2', 'Step3' ],
    args.category = ['5c28c79af62fad2514ccc788']
    args.ingredient = ['5c28c8ccb99a9d263462a083', '5c28c8d3b99a9d263462a084', '5c28c8d6b99a9d263462a085']
}

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

У нас была эта проблема.Мы искали объект службы в базе данных, цена на которую была указана.

Ожидаемый результат:

service: {
  price: 9999
}

Однако мы случайно запросили «услуги» (вместо «услуги»), которые дали нам массив цен (только с одной ценой), например так:

[ [Object: null prototype] { price: 9.99 } ]

Это было вызвано неверным запросом.

Как только мы изменили запрос на «сервис» (вместо «сервисы»), данные вернулись, как и ожидалосьбез нулевого прототипа.

Мы используем Prisma в качестве нашего ORM, но, возможно, вы запрашиваете рецепты, когда вы должны запрашивать рецепт.

0 голосов
/ 17 февраля 2019

Вы можете сделать что-то, как показано ниже, и [Object: null prototype] исчезнет

const a = JSON.parse(JSON.stringify(args));

args.category равно

[[Object: null prototype] { id: '5c28c79af62fad2514ccc788' }], 

JSON.parse (JSON.stringify (args.category) будет { id: '5c28c79af62fad2514ccc788' }

...