当我对正在使用我的GraphQL服务器代码的graphiql进行突变时,它为对象中的所有条目返回null。
我使用的是Node and Express后端,它使用的是MongoDB数据库,该数据库使用猫鼬来访问它。
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
答案 0 :(得分:0)
请尝试在解析器函数中使用以下更新的代码进行更新,“ {new:true}”有助于从mongoDB返回更新的对象。我希望这会有所帮助。
updateTodo: {
type: TodoType,
args: {
id: {
type: new GraphQLNonNull(GraphQLID)
},
action: {
type: new GraphQLNonNull(GraphQLString)
}
},
resolve(parent, args) {
return new Promise((resolve, reject) => {
Todo.findOneAndUpdate({ // updateOne is a MongoDB/mongoose function
"_id": args.id
}, {
$set: {
"action": args.action
}
}, {
new: true // This makes sure the return result is the updated information
})
.then((result) => {
return resolve(result);
})
.catch((err) => {
return reject(err);
})
})
.then((finalResult) => {
return finalResult;
})
.catch((err) => {
return err;
})
}
}
请让我知道结果。