繁体   English   中英

Apollo GraphQL - 类型错误:无法读取未定义的属性“findOrCreateUser”

[英]Apollo GraphQL - TypeError: Cannot read property 'findOrCreateUser' of undefined

我正在学习本教程https://www.apollographql.com/docs/tutorial/mutation-resolvers/#book-trips

并最终收到此错误:

"TypeError: Cannot read property 'findOrCreateUser' of undefined",
            "    at login 

下面是我用来调用登录的 function:

mutation LoginUser {
  login(email: "daisy@apollographql.com") {
    token
  }
}

下面的文件是调用 findOrCreateUser 的地方: src/resolvers.js

module.exports = {
    Mutation: {
        login: async (_, {email}, {dataSources}) => {
            const user = await dataSources.userAPI.findOrCreateUser({ email });
            if (user) {
                user.token = Buffer.from(email).toString('base64');
                return user;
            }
        },
    },

这是定义数据源的地方: src/index.js

require('dotenv').config();
const { ApolloServer } = require('apollo-server');
const typeDefs = require('./schema');
const { createStore } = require('./utils');
const resolvers = require('./resolvers');
const isEmail = require('isemail');

const LaunchAPI = require('./datasources/launch');
const UserAPI = require('./datasources/user');

const store = createStore();

const server = new ApolloServer({
    context: async ({req}) => {
        const auth = req.headers && req.headers.authorization || '';
        const email = Buffer.from(auth, 'base64').toString('ascii');
        if (!isEmail.validate(email)) return {user: null};
        // find a user by their email
        const users = await store.user.findOrCreate({ where: { email } });
        const user = users && users[0] || null;
        return { user: {...user.dataValues } };
    },
    dataSources: () => ({
        launchAPI: new LaunchAPI(),
        UserAPI: new UserAPI({store})
    }),
    typeDefs,
    resolvers,
});

server.listen().then(() => {
    console.log(`
        Server is running!
        Listening on port 4000
        Explore at https://studio.apollographql.com/dev
    `)
});

正如 xadm 在评论中提到的,问题是您对userAPIUserAPI的使用。 数据源 object 在以下块的 index.js 中创建

dataSources: () => ({
        launchAPI: new LaunchAPI(),
        UserAPI: new UserAPI({store})
    }),

在这里你定义了datasources.UserAPI但是在 resolvers.js 中你将它称为datasources.userAPI (注意 userAPI 的大小写差异)。 您的问题可以通过将上面的代码块更改为来解决

dataSources: () => ({
        launchAPI: new LaunchAPI(),
        userAPI: new UserAPI({store})
    }),

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM