Mongoose
とGraphQL
を使用して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']
}
_
この問題がありました。私たちは、価格が設定されているデータベース内のサービスオブジェクトを照会しようとしていました。
期待される結果:
service: {
price: 9999
}
ただし、「サービス」ではなく「サービス」を誤って照会したため、次のような一連の価格(1つの価格のみ)が得られました。
[ [Object: null prototype] { price: 9.99 } ]
これは不正なクエリが原因でした。
クエリを(「サービス」ではなく)「サービス」に変更すると、データはnullプロトタイプなしで期待どおりに戻りました。
ただし、ORMとしてPrismaを使用していますが、レシピを照会する必要があるときに、レシピを照会している可能性があります。
遊び場で、設定要求の資格情報を省略から含めるように変更し、機能しました、"request.credentials": "include"
お役に立てば幸いです。