Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Api “种类未定义”在这里是什么意思?我找不到解决这个错误的办法_Api_Graphql_Backend_Apollo_Apollo Server - Fatal编程技术网

Api “种类未定义”在这里是什么意思?我找不到解决这个错误的办法

Api “种类未定义”在这里是什么意思?我找不到解决这个错误的办法,api,graphql,backend,apollo,apollo-server,Api,Graphql,Backend,Apollo,Apollo Server,我正在尝试将我的GraphQLAPI模式分解为不同的模式。 在熟悉了大量它们之后,我决定在下面使用“extend”来实现这一点 (我还想为他们使用.graphql文件扩展名,但我只有一种方法可以做到这一点——使用webpack。我并不擅长使用webpack,所以我首先尝试使用.js文件) 但是:我无法处理这个简单的任务,因为我要么有类型错误:无法读取未定义的属性“种类”,要么传递了无效的架构,或者弹出了其他内容 我在这里做错了什么?拆分和缝合模式的最佳实践/方法是什么 提前谢谢 server.j

我正在尝试将我的GraphQLAPI模式分解为不同的模式。 在熟悉了大量它们之后,我决定在下面使用“extend”来实现这一点 (我还想为他们使用.graphql文件扩展名,但我只有一种方法可以做到这一点——使用webpack。我并不擅长使用webpack,所以我首先尝试使用.js文件)

但是:我无法处理这个简单的任务,因为我要么有类型错误:无法读取未定义的属性“种类”,要么传递了无效的架构,或者弹出了其他内容

我在这里做错了什么?拆分和缝合模式的最佳实践/方法是什么

提前谢谢

server.js

import express from "express";
import { ApolloServer, gql } from "apollo-server-express";
import { makeExecutableSchema } from 'graphql-tools';
import * as mongoClient from "./config";
import * as _ from 'lodash';

import { UserSchema, UserResolvers } from "./graphql.partials/user.api";

const port = process.env.PORT || 8080;

const RootSchema = gql`

    type Query {
        _empty: String
    }

    type Mutation {
        _empty: String
    }
`

const RootResolvers = {
};


const app = express();


const schema = makeExecutableSchema({
    typeDefs: [RootSchema, UserSchema],
    resolvers: _.merge(RootResolvers, UserResolvers)
});


const apolloServer = new ApolloServer({ schema });
apolloServer.applyMiddleware({ app });


app.listen({ port }, () => {
    console.log(
        `Server ready at http://localhost:${port}${apolloServer.graphqlPath}`
    );
});

用户模式


const { gql } = require("apollo-server-express");
import User from '../models/User';


export const typeDefs = gql`

extend type Query {
    users: [User]
    user(id: String): User
} 

extend type Mutation {
    addUser(email: String, password: String): User
    deleteUser(id: String!): User
    updateUser(user: UserInput): User
}

type User {
    id: ID!
    firstName: String
    lastName: String
    email: String!
    password: String!
    confirmed: Boolean
    role: String
}

input UserInput {
    id: ID!
    firstName: String
    lastName: String
    email: String
    password: String
    confirmed: Boolean
    role: String
}
`

export const UserResolvers = {
    Query: {
        users: async (obj, args, context, info) => {
            try {
                const res = await User.find();
                return res;
            } catch (err) {
                return err.message;
            }
        },
        user: async (obj, args, context, info) => {
            try {
                const res = User.findById(args['id']);
                return res;
            } catch (e) {
                return e.message;
            }
        }
    },

    Mutation: {
        addUser: async (obj, args, context, info) => {
            try {
                const res = await User.create(args);
                return res;
            } catch (err) {
                return err.message;
            }
        },
        deleteUser: async (obj, args, context, info) => {
            try {
                return User.findByIdAndDelete(args['id']);
            } catch (e) {
                return e.message;
            }
        },
        updateUser: async (obj, args, context, info) => {
            try {
                return User.findByIdAndUpdate(args.user.id, args.user)
            } catch (e) {
                return e.message;
            }

        }
    }
}


文件中没有名为
UserSchema
的导出。您有两个命名的导出--
UserResolvers
typeDefs
。因此,当您尝试导入
UserSchema
时,其值未定义。

非常感谢!我检查了很多次,重新排列了代码,并用不同的方法进行了处理。。。你帮了我很多,两个与你的问题无关的提示。第一,您可以使用而不是
graphql标记的加载程序来导入
.graphql
文件。第二,你可以有一个没有字段的“空”类型,只要你扩展它。因此,您不必添加一个伪
\u empty
字段,只需执行
类型查询
,而不必使用花括号。@DanielRearden,Babel是否支持“扩展”,因为现在我正在尝试从graphql导入模式加载器importSchema,但它不支持它。它只能导入完全不同的模式,而不需要任何扩展。它只是将字符串解析为DocumentNodes,类型扩展是标准的GraphQL语法。