簡體   English   中英

無法讀取未定義的屬性“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;
        }
    },
}

帶有錯誤消息的游樂場查詢:

操場查詢

最后是 getFosseReport 查詢的文檔,它顯示了所有內容,例如 FosseReport 的返回類型:

游樂場文檔

我確定我在這里遺漏了一些愚蠢的東西,但如果你們有任何建議,我將不勝感激。

編輯:對於 FosseReport,也忘記顯示我的 mongoose model:

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 的上下文 object:

const server = new ApolloServer({
    typeDefs,
    resolvers,
    context: async ({req}) => {
        const token = req.headers["authorization"];
        return { User, FosseReport, currentUser: await getUser(token) };
    }
});

我沒有通過上下文傳遞“FosseReport”object,只有用戶 object,這就是它不起作用的原因。 因此,如果將來有人犯了同樣的錯誤……那么現在您知道了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM