这是在一个Node
项目中,我正在尝试为一个简单的博客编写一个graphql
API。
我正在使用apollo
,并在幕后试图通过mongoose将数据保存到mongo
数据库。
当我尝试保存帖子数据时,我当前收到以下错误。
“图形错误:ID不能表示值:{类型:“缓冲区”,数据:[数组] }“,位于GraphQL标量类型.序列化(/用户/名称/项目/图形时间/节点模块/图形ql/类型/标量.js:301:11)",
它是抱怨作者插入作为职位的一部分,我相信。
我的模式或者我在Apollo GraphiEditor上执行查询的方式有什么问题吗?
是数据库方案
import mongoose from "mongoose";
const authorSchema = new mongoose.Schema({
name: { type: String, required: true },
avatar: { type: String },
});
export const Author = mongoose.model('Author', authorSchema);
const postSchema = new mongoose.Schema({
title: { type: String, required: true },
authors: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Author'
}
]
});
export const Post = mongoose.model('Post', postSchema);
这是graphql架构
type Post {
id: ID!
title: String
authors: [Author]
}
type Author {
id: ID!
name: String
avatar: String
}
type Mutation {
addPost(
title: String!,
authors: [ID!],
): Post
}
这是grapql解析器。
const resolvers = {
Mutation: {
addPost: (_, args, context) => {
const newPost = new Post({
title: args.title,
authors: args.authors,
});
return newPost.save();
},
},
};
这就是我在抛出错误的编辑器中查询的方式。
注:DB中已经有一个作者,假设该行的ID为:63babc44e18d174016b03433
mutation {
addPost(
title: "New Post",
authors: ["63babc44e18d174016b03433"],
) {
title
authors {
id
name
}
}
}
1条答案
按热度按时间j1dl9f461#
你是这样定义突变的:
这意味着
addPost
返回一个Post
对象,即:因此
authors
是Author
对象的数组,而不是_id
对象的数组。您正在获取ID并保存到DB中,但返回的对象与
[Author]
不匹配。还要注意postSchema
是如何成为mongoose.Schema.Types.ObjectId
的。引用到Authors,是的,但它是一个ID数组。因此,您可以返回ID数组而不是Author对象,或者在mongoose中填充查询,因为您有引用。