[英]GraphQL and Sequelize doesn't return inserted object
我陷入了GraphQL
和Sequelize
后端的错误,由于某种原因,即使我保证在解析器中返回的数据,我的变异也不会返回数据。 我觉得这可能是我所想不到的小东西,但是我已经被卡住了一段时间了。
Sequelize
部分有效,确实插入了对象,但是返回始终为空对象。
这是我的突变:
mutation {
createUserVoucher(pinId: 1, voucherId: 1) {
id
}
}
这是回报:
{
"data": {
"createUserVoucher": {
"id": null
}
}
}
这是我的解析器:
createUserVoucher: (parent, args, { user, models }) => {
args['userId'] = user.id;
models.UserVoucher.count({
where: {utilized: true, pinId: args.pinId, userId: args.userId}
}).then( c => {
if (c > 0) {
return []
} else {
models.Voucher.findOne({
where: {
id: args.voucherId
}
}).then( voucher => {
models.UserVoucher.count({
where: { voucherId: args.voucherId }
}).then( c => {
return models.UserVoucher.create(args)
})
})
}
});
return []
}
UserVoucher定义:
type UserVoucher {
id: Int
nodeId: Int!
userId: ID!
voucherId: ID!
voucher: Voucher
pinId: ID!
capturedAt: DateTime
utilized: Boolean
}
`;
变异定义:
createUserVoucher(
pinId: Int!,
voucherId: Int!
): UserVoucher
关于我所缺少的任何想法吗? 将不胜感激,非常感谢! 另外,如果需要更多信息,请告诉我!
您缺少三个回报:
createUserVoucher: (parent, args, { user, models }) => {
args['userId'] = user.id;
return models.UserVoucher.count({ <----- HERE
where: {utilized: true, pinId: args.pinId, userId: args.userId}
}).then( c => {
if (c > 0) {
return []
} else {
return models.Voucher.findOne({ // <----- HERE
where: {
id: args.voucherId
}
}).then( voucher => {
return models.UserVoucher.count({ // <----- AND HERE
where: { voucherId: args.voucherId }
}).then( c => {
return models.UserVoucher.create(args)
})
})
}
});
return []
}
链接诺言时,记住始终在每个then
调用内返回所有其他诺言很重要-否则会触发诺言,但不会等待。
几个附加说明:
虽然严格来说不会有任何损害,但您应该在解析器内部返回null
而不是空数组。 根据您的架构,您的变异返回一个可为空的UserVoucher对象。 返回空数组会误导任何人阅读您的代码,因为这暗示此解析器应返回数组。
不使用第二个UserVoucher.count
调用和Voucher.findOne
调用的结果,这意味着可能没有必要吗?
最后,您还可以使用async / await显着清理代码:
createUserVoucher: async (parent, args, { user, models }) => {
args['userId'] = user.id;
const c = await models.UserVoucher.count({
where: {utilized: true, pinId: args.pinId, userId: args.userId}
})
if (c > 0) return null
const voucher = await models.Voucher.findOne({
where: { id: args.voucherId }
})
const c2 = await models.UserVoucher.count({
where: { voucherId: args.voucherId }
})
return models.UserVoucher.create(args) // still need a return here
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.