web-dev-qa-db-ja.com

GraphQLで[オブジェクト:nullプロトタイプ]を取り除く方法はありますか

MongooseGraphQLを使用して1対多の関係データベースを作成しようとしています。

データをGraphQLミューテーション引数に挿入するたびに、_[Object: null prototype]_エラーが発生します。

デバッグのために_[Object: null prototype]_をしようとしたときに、オブジェクトの前に_console.log_があることに気づきました。

私は多くの方法を試し、map() argsを試したり、replace()を使用したりしましたが、うまくいきませんでした。私が得ているのは_"args.ingredient.map/replace is not a function"_だけです

たとえば、引数を変更して、ハードコードされたメソッドをテストしました。

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

驚くべきことに、それはこの方法で機能します。入力をオブジェクトにすることはできず、単なるIDにすることを想定しています。

実際の結果については、以下を参照してください。

リゾルバ

_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']
}
_
5
FIrman

この問題がありました。私たちは、価格が設定されているデータベース内のサービスオブジェクトを照会しようとしていました。

期待される結果:

service: {
  price: 9999
}

ただし、「サービス」ではなく「サービス」を誤って照会したため、次のような一連の価格(1つの価格のみ)が得られました。

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

これは不正なクエリが原因でした。

クエリを(「サービス」ではなく)「サービス」に変更すると、データはnullプロトタイプなしで期待どおりに戻りました。

ただし、ORMとしてPrismaを使用していますが、レシピを照会する必要があるときに、レシピを照会している可能性があります。

0
Joshua Dyck

遊び場で、設定要求の資格情報を省略から含めるように変更し、機能しました、"request.credentials": "include"お役に立てば幸いです。

0