只有在将"Cannot read property 'get' of undefined"数组对象添加到突变中时,才会得到product错误,如果只添加orderId Int,则没有错误。以下是更多信息:
模式
type Order {
orderId: Int
product: [ProductInput]
}
input ProductInput {
prodId: String
value: [ValueInput]
}
type Product {
prodId: String
value: [Value]
}
type Value{
name:String,
props:String
}
input ValueInput{
name:String,
props:String
}突变
addOrder(orderId: Int, product: [ProductInput]):Order救生器(用猫鼬)
addOrder(parent, args, context, info) {
let orderId;
let product;
if (args.orderId) {
orderId = { orderId: args.orderId };
}
if (args.product) {
product= { product: args.product};
}
return context.Order.findOneAndUpdate(
{ orderId: args.orderId },
{
$setOnInsert: {
...orderId,
...product
}
},
{ new: true, upsert: true }
);
}即使我得到错误,突变也在数据库中成功,但是graphql返回
{
"errors": [
{
"message": "Cannot read property 'get' of undefined",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"addOrder"
],
"extensions": {
"code": "INTERNAL_SERVER_ERROR",
"exception": {
"stacktrace": [
"TypeError: Cannot read property 'get' of undefined",
" at EmbeddedDocument.<anonymous> (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\schema.js:1824:23)",
" at VirtualType.applyGetters (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\virtualtype.js:137:25)",
" at EmbeddedDocument.Document.get (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\document.js:1508:19)",
" at applyVirtuals (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\document.js:3246:20)",
" at EmbeddedDocument.Document.$toObject (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\document.js:2986:5)",
" at EmbeddedDocument.Document.toObject (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\document.js:3169:15)",
" at DocumentArrayPath.cast (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\schema\\documentarray.js:401:27)",
" at DocumentArrayPath.SchemaType.applySetters (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\schematype.js:1010:12)",
" at DocumentArrayPath.SchemaType._castForQuery (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\schematype.js:1424:15)",
" at DocumentArrayPath.SchemaType.castForQueryWrapper (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\schematype.js:1391:17)",
" at castUpdateVal (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\helpers\\query\\castUpdate.js:515:19)",
" at walkUpdatePath (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\helpers\\query\\castUpdate.js:342:22)",
" at castUpdate (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\helpers\\query\\castUpdate.js:99:18)",
" at model.Query._castUpdate (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\query.js:4481:10)",
" at castDoc (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\query.js:4509:18)",
" at model.Query.Query._findAndModify (C:\\Users\\mihai\\Desktop\\Projects\\ECOM\\BACKEND\\node_modules\\mongoose\\lib\\query.js:3472:22)"
]
}
}
}
],
"data": {
"addOrder": null
}
}发布于 2020-03-09 09:54:52
第一
突变
addOrder(orderId: Int, product: [ProductInput]):OrderaddOrder 应返回 Order 对象
findOneAndUpdate方法插入一个新记录,但返回结果是可选的-它可以使用returnNewDocument: true (默认值:false)来完成-参见文档
第二
如果要插入嵌套/嵌入式实体-- ProductInput数组--您也需要插入/创建它们--参见略微相关的问题 --当然它取决于猫鼬模式(您没有提供)。
让mongose部件工作并使用graphql解析器“包装”要比调整/更改蒙戈模式来反映grpahql类型/解析器更改要容易。
https://stackoverflow.com/questions/60597781
复制相似问题