【发布时间】:2019-05-22 05:37:34
【问题描述】:
当我对使用我的 GraphQL 服务器代码的 graphiql 进行突变时,它会为对象中的所有条目返回 null。
我正在使用 Node 和 Express 后端,它使用的是 MongoDB 数据库,该数据库使用 mongoose 来访问它。
updateTodo: {
type: TodoType,
args: {
id: {
type: new GraphQLNonNull(GraphQLID)
},
action: {
type: new GraphQLNonNull(GraphQLString)
}
},
resolve(parent, args) {
return Todo.updateOne({ // updateOne is a MongoDB/mongoose function
_id: args.id
}, {
$set: {
action: args.action
}
});
}
}
我得到了什么
{
"data": {
"updateTodo": {
"id": null,
"action": null
}
}
}
来自以下
mutation {
updateTodo(id: "5c18590fa6cd6b3353e66b06", action: "A new Todo") {
id
action
}
我之后会这样做
{
todos{
id
action
}
}
我明白了
{
"data": {
"todos": [
{
"id": "5c18590fa6cd6b3353e66b06",
"action": "A new Todo"
}
]
}
}
所以我知道它正在工作,但更愿意获得新的数据返回。
更多信息
const TodoType = new GraphQLObjectType({
name: 'Todo',
fields: () => ({
id: {
type: GraphQLID
},
action: {
type: GraphQLString
},
isCompleted: {
type: GraphQLBoolean
},
user: {
type: UserType,
resolve(parent, args) {
return User.findById(parent.userId);
}
}
})
});
导入到文件中。
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const todoSchema = new Schema({
action: String,
isCompleted: Boolean,
userId: String
})
module.exports = mongoose.model('Todo', todoSchema);
这里是 github 存储库,您可以查看代码 https://github.com/petersrule/graphql-node-express-boilerplate
【问题讨论】:
-
可以添加
Todo.updateOne的代码吗? -
感谢您的评论。我添加了一条注释来阐明该功能,并在底部添加了一些代码来阐明“Todo”是什么。如果您需要更多,请告诉我。再次感谢!
标签: mongodb mongoose graphql graphql-js express-graphql