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

GraphQL启动报错Syntax Error: Expected ":", found ")"排查求助

错误定位

你遇到的是GraphQL SDL语法错误,报错位置指向typeDefs第53行,也就是Mutation里的addEmployee(Employee): Employee这行:

  • GraphQL要求所有字段参数必须遵循参数名: 类型的格式,你直接将类型名Employee放在参数括号里,缺少参数名和冒号,导致解析器预期读到冒号时直接碰到了右括号,抛出错误。

修复步骤

1. 修改typeDefs.js

首先新增EmployeeInput输入类型(输入参数必须用input而不是type定义),再修正addEmployee的参数定义:

const { gql } = require('apollo-server-express');

// create our typeDefs
// TODO timecard formatting?
const typeDefs = gql`
type Employee {
  _id: ID
  firstName: String
  lastName: String
  street: String
  city: String
  state: String
  zipcode: Int
  email: String
  phone: String
  timeCards: [Int]
}  

# 新增员工输入类型用于传参
input EmployeeInput {
  firstName: String!
  lastName: String!
  street: String
  city: String
  state: String
  zipcode: Int
  email: String!
  phone: String
}

type Client {
    _id: ID
    firstName: String
    lastName: String
    street: String
    city: String
    state: String
    zipcode: Int
    email: String
    phone: String
    workOrders: [WorkOrder]
  }
  
  type WorkOrder {
    _id: ID
    date: String
    description: String
    notes: [String]
    parts: [String]
    invoice: String
    timeClocks: [Int]
  }

  type Warehouse {
    parts: [String]
    laborItems: [String]
  }
 

  type Query {
    me: Employee
    employees(_id: ID): [Employee]
    employee(_id: ID!): Employee
    clients: [Client]
    client(_id: ID!): Client
  }

  type Mutation {
    # 修正参数写法:参数名+冒号+输入类型
    addEmployee(input: EmployeeInput!): Employee
  }
`;


// export the typeDefs
module.exports = typeDefs;

2. 修改resolvers.js的addEmployee方法

补充返回语句,否则创建员工后查询会返回空值:

const { Client, Employee } = require('../models');

const resolvers = {
    Query: {
        // get all clients
        clients: async () => {
            return Client.find()
            .populate("workOrders");
        },

            // get single client
        client: async (parent, { _id }) => {
            return Client.findOne({ _id })
            //.populate("workOrders");
        },

        // get all employees
        employees: async () => {
            return Employee.find()
            .populate("timeCards");
        },

        // get single employee
        employee: async(parent, { _id }) => {
            return Employee.findOne({ _id })
            .populate("timeCards");
        }
    },

    Mutation: {
        addEmployee: async (parent, { input }) => {
            const employee = await Employee.create(input);
            // 补充返回创建好的员工对象
            return employee;
        }
    }
};

module.exports = resolvers;

内容的提问来源于stack exchange,提问作者Shawnlittrel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 22:33:03