You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apollo Server报错:需传入schema/modules/typeDefs配置排查

问题根因

核心触发原因是ES模块导入导出不匹配,传入ApolloServer实例的schema实际为undefined,触发参数校验报错:

  • 你的schema.js中使用默认导出语法:export default schema;
  • 但server.js中错误使用了命名导入写法:import {schema} from "./schema";
    这种写法只会尝试读取模块内名为schema的命名导出,找不到对应值时会赋值为undefined,ApolloServer接收不到合法的schema实例,就会抛出你看到的缺少配置错误。

另外代码里还有2个隐藏语法问题,修完导入问题后如果不处理会继续触发运行报错:

  1. users.typeDefs.js中gql标签写法错误,gql和模板字符串之间多了一个多余的双引号
  2. users.mutations.js的client导入语句末尾多了一个多余的双引号

修复方案

1. 修正server.js的schema导入逻辑

将命名导入改为默认导入,顺便清理未使用的冗余导入:

require ("dotenv").config();

import { ApolloServer } from "apollo-server";
// 去掉大括号,使用默认导入接收schema
import schema from "./schema";

const server = new ApolloServer({
  schema,
});

const PORT = process.env.PORT

server.listen(PORT).then(() => {
  console.log(`🚀 Server ready at http://localhost:${PORT} ✅ `);
});

2. 修正users.typeDefs.js的gql语法

删除gql和反引号之间多余的双引号:

import { gql } from "apollo-server";

export default gql`
    type User {
        id: String!
        firstName: String!
        lastName: String
        username: String!
        email: String!
        createdAt: String!
        updatedAt: String!
    }

    type Mutation {
        createAccount(
            firstName: String!
            lastName: String
            username: String!
            email: String!
            password: String!
        ): User
    }
    
    type Query {
        seeProfile(username:String): User
    }
`;

3. 修正users.mutations.js的导入语法

删除导入语句末尾多余的双引号:

import { PrismaClient } from "@prisma/client";
import client from "../client";

export default {
    Mutation: {
        createAccount: async (
            _, {
                firstName,
                lastName,
                username,
                email,
                password
            }
        ) => {
            //check if username or email are already on DB.
            const existingUser = await client.user.findFirst({
                where: {
                    OR: [
                        {
                            username,
                        },
                        {
                            email,   
                        }
                    ],
                },
            });
            console.log(existingUser);
            // hash password
            // save and return the user
        },
    },
};

改完以上三点后重启服务,ApolloServer就能正常读取合并后的schema实例,不会再抛出配置缺失错误。


内容的提问来源于stack exchange,提问作者Mr.Montez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:15:37