无法读取未定义的 属性 'findOne' - Vue.js,Apollo 服务器,GraphQL 错误
Cannot read property 'findOne' of undefined - Vue.js, Apollo Server, GraphQL error
大约 24 小时以来,我一直在努力弄清楚自己做错了什么,所以我终于决定要崩溃了,如果你们看到不对劲的地方,请问你们所有很棒的人。
我的 Apollo 服务器 运行 很好,我的 getUser GraphQL 查询工作正常,但我无法使 getFosseReport 查询工作,出现上述错误(提供的屏幕截图)。
首先,我的 typedefs.graphql 文件显示了我的 FosseReport 类型,以及 getFosseReport 查询:
type Query {
getUser(email: String!): User
getCurrentUser: User
getFosseReport(facility_id: String!, report_date: String!): FosseReport
}
type Token {
token: String!
}
type FosseReport {
_id: ID
facility_id: String!
report_date: String!
reports: [FosseItems]
created_date: String
modified_date: String
}
type FosseItems {
account_desc: String
fytd_cgs: String
fytd_credit: String
fytd_debit: String
ptd_cgs: String
ptd_credit: String
ptd_debit: String
seq_cg_cd: String
today_cgs: String
today_credit: String
today_debit: String
}
type User {
_id: ID
email: String!
password: String!
facility_id: String!
}
我的带有 getFosseReport 查询的解析器文件:
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const createToken = (user, secret, expiresIn) => {
const { username, email } = user;
return jwt.sign({username, email}, secret, {expiresIn});
};
module.exports = {
Query: {
getUser: async (_, {email}, {User}) => {
const user = await User.findOne({email});
if(user) {
return user;
}
return "None Found";
},
getFosseReport: async(_, {facility_id, report_date}, {FosseReport}) => {
const fosseReport = await FosseReport.findOne();
if(!fosseReport) {
return null;
}
return fosseReport;
},
getCurrentUser: async (_, args, { User, currentUser }) => {
if(!currentUser) {
return null;
}
const user = await User.findOne({email: currentUser.email});
return user;
}
},
}
带有错误消息的 playground 查询:
最后是 getFosseReport 查询的文档,它显示了所有内容,例如 return 类型的 FosseReport:
我确定我在这里遗漏了一些愚蠢的东西,但如果你们有任何建议,我将不胜感激。
编辑:也忘记为 FosseReport 显示我的猫鼬模型:
const mongoose = require('mongoose');
const FosseReportSchema = new mongoose.Schema({
facility_id: {
type: String
},
report_date: {
type: Date
},
reports: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: "FosseReportPart"
},
created_date: {
type: Date,
default: Date.now
},
modified_date: {
type: Date,
default: Date.now
}
});
module.exports = mongoose.model('FosseReport', FosseReportSchema);
好吧,我真的觉得自己很蠢。显然我完全忘记了我的 server.js 文件,最值得注意的是你传递给 ApolloServer 的上下文对象:
const server = new ApolloServer({
typeDefs,
resolvers,
context: async ({req}) => {
const token = req.headers["authorization"];
return { User, FosseReport, currentUser: await getUser(token) };
}
});
我没有通过上下文传递“FosseReport”对象,只有 User 对象,这就是它不起作用的原因。因此,如果将来有人犯了同样的错误……那么现在你知道了。
大约 24 小时以来,我一直在努力弄清楚自己做错了什么,所以我终于决定要崩溃了,如果你们看到不对劲的地方,请问你们所有很棒的人。
我的 Apollo 服务器 运行 很好,我的 getUser GraphQL 查询工作正常,但我无法使 getFosseReport 查询工作,出现上述错误(提供的屏幕截图)。
首先,我的 typedefs.graphql 文件显示了我的 FosseReport 类型,以及 getFosseReport 查询:
type Query {
getUser(email: String!): User
getCurrentUser: User
getFosseReport(facility_id: String!, report_date: String!): FosseReport
}
type Token {
token: String!
}
type FosseReport {
_id: ID
facility_id: String!
report_date: String!
reports: [FosseItems]
created_date: String
modified_date: String
}
type FosseItems {
account_desc: String
fytd_cgs: String
fytd_credit: String
fytd_debit: String
ptd_cgs: String
ptd_credit: String
ptd_debit: String
seq_cg_cd: String
today_cgs: String
today_credit: String
today_debit: String
}
type User {
_id: ID
email: String!
password: String!
facility_id: String!
}
我的带有 getFosseReport 查询的解析器文件:
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const createToken = (user, secret, expiresIn) => {
const { username, email } = user;
return jwt.sign({username, email}, secret, {expiresIn});
};
module.exports = {
Query: {
getUser: async (_, {email}, {User}) => {
const user = await User.findOne({email});
if(user) {
return user;
}
return "None Found";
},
getFosseReport: async(_, {facility_id, report_date}, {FosseReport}) => {
const fosseReport = await FosseReport.findOne();
if(!fosseReport) {
return null;
}
return fosseReport;
},
getCurrentUser: async (_, args, { User, currentUser }) => {
if(!currentUser) {
return null;
}
const user = await User.findOne({email: currentUser.email});
return user;
}
},
}
带有错误消息的 playground 查询:
最后是 getFosseReport 查询的文档,它显示了所有内容,例如 return 类型的 FosseReport:
我确定我在这里遗漏了一些愚蠢的东西,但如果你们有任何建议,我将不胜感激。
编辑:也忘记为 FosseReport 显示我的猫鼬模型:
const mongoose = require('mongoose');
const FosseReportSchema = new mongoose.Schema({
facility_id: {
type: String
},
report_date: {
type: Date
},
reports: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: "FosseReportPart"
},
created_date: {
type: Date,
default: Date.now
},
modified_date: {
type: Date,
default: Date.now
}
});
module.exports = mongoose.model('FosseReport', FosseReportSchema);
好吧,我真的觉得自己很蠢。显然我完全忘记了我的 server.js 文件,最值得注意的是你传递给 ApolloServer 的上下文对象:
const server = new ApolloServer({
typeDefs,
resolvers,
context: async ({req}) => {
const token = req.headers["authorization"];
return { User, FosseReport, currentUser: await getUser(token) };
}
});
我没有通过上下文传递“FosseReport”对象,只有 User 对象,这就是它不起作用的原因。因此,如果将来有人犯了同样的错误……那么现在你知道了。