Javascript TypeError:无法读取未定义的属性。Apollo服务器和Sequelize的GraphQL变异
这是我第一次尝试GraphQl,我在操场上遇到了这个错误:Javascript TypeError:无法读取未定义的属性。Apollo服务器和Sequelize的GraphQL变异,javascript,graphql,sequelize.js,Javascript,Graphql,Sequelize.js,这是我第一次尝试GraphQl,我在操场上遇到了这个错误: { "errors": [ { "message": "TypeError: Cannot read property 'PaymentInfo' of undefined", "locations": [ { "line": 2, "column": 3 } ], "path": [ "c
{
"errors": [
{
"message": "TypeError: Cannot read property 'PaymentInfo' of undefined",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"createCreditCard"
],
"extensions": {
"code": "INTERNAL_SERVER_ERROR",
"exception": {
"stacktrace": [
"Error: TypeError: Cannot read property 'PaymentInfo' of undefined",
" at _callee3$ (/Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/src/resolvers/payment.js:18:23)",
" at tryCatch (/Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/node_modules/regenerator-runtime/runtime.js:62:40)",
" at Generator.invoke [as _invoke] (/Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/node_modules/regenerator-runtime/runtime.js:288:22)",
" at Generator.prototype.(anonymous function) [as next] (/Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/node_modules/regenerator-runtime/runtime.js:114:21)",
" at asyncGeneratorStep (/Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/src/resolvers/payment.js:8:103)",
" at _next (/Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/src/resolvers/payment.js:10:194)",
" at /Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/src/resolvers/payment.js:10:364",
" at new Promise (<anonymous>)",
" at /Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/src/resolvers/payment.js:10:97",
" at createCreditCard (/Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/src/resolvers/payment.js:11:25)",
" at field.resolve (/Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/node_modules/graphql-extensions/src/index.ts:274:18)",
" at resolveFieldValueOrError (/Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/node_modules/graphql/execution/execute.js:467:18)",
" at resolveField (/Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/node_modules/graphql/execution/execute.js:434:16)",
" at /Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/node_modules/graphql/execution/execute.js:244:18",
" at /Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/node_modules/graphql/jsutils/promiseReduce.js:23:10",
" at Array.reduce (<anonymous>)",
" at promiseReduce (/Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/node_modules/graphql/jsutils/promiseReduce.js:20:17)",
" at executeFieldsSerially (/Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/node_modules/graphql/execution/execute.js:241:37)",
" at executeOperation (/Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/node_modules/graphql/execution/execute.js:219:55)",
" at executeImpl (/Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/node_modules/graphql/execution/execute.js:104:14)",
" at Object.execute (/Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/node_modules/graphql/execution/execute.js:64:35)",
" at /Users/milano/Documents/Projects/mtg-shop-v1/mtg-shop-server/node_modules/apollo-server-core/src/requestPipeline.ts:464:30"
]
}
}
}
],
"data": null
}
我的解析器:
Mutation: {
createCreditCard: async (parent, { me, models }) => {
try {
return await models.PaymentInfo.create({
paymentInfos,
userId: me.id,
});
} catch (error) {
throw new Error(error);
}
},
我的模式:
createCreditCard(
cardNumber: Int!
cvv: Int!
isValid: Boolean!
): PaymentInfo!
deleteCreditCard(id: ID!): Boolean!
}
没有加起来的是,我可以通过code()使用sequelize querys创建任何东西,但当涉及到在操场上使用突变时,我就是做不到
我确信我在操场上的变异语法上犯了错误,但我不知道是什么
谢谢您的解析程序似乎有问题。Graphql解析器被传递了四个参数-
obj、args、context和info
。我猜{me,models}
是试图破坏您的上下文结构,但可能存在问题,因为您没有考虑或访问插入的args对象,您需要访问createCreditCard
变量(实际上,没有看到paymentInfos的定义位置)。或许可以尝试以下方法:
Mutation: {
createCreditCard: async (parent, args, { me, models }) => {
try {
const paymentInfos = { ...args };
console.log(paymentInfos); // confirm you are passing object of correct shape to db
return await models.PaymentInfo.create({
paymentInfos,
userId: me.id,
});
} catch (error) {
throw new Error(error);
}
},
Mutation: {
createCreditCard: async (parent, args, { me, models }) => {
try {
const paymentInfos = { ...args };
console.log(paymentInfos); // confirm you are passing object of correct shape to db
return await models.PaymentInfo.create({
paymentInfos,
userId: me.id,
});
} catch (error) {
throw new Error(error);
}
},