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

搭建Apollo Server时遇ReferenceError: parent is not defined错误求助

Apollo Server 报错:ReferenceError: parent is not defined 解决方法

问题场景

搭建Apollo Server时出现报错:ReferenceError: parent is not defined,相关代码如下:

import { User, Landing, Category } from './resolvers';

export const resolves = {
  Query: {
    UserDelete: User.UserDelete(parent, args),
    UserAuth: User.UserAuth(parent, args),
    UserView: User.UserView(parent, args),
    UserLandings: User.UserLandings(parent, args),

    CategoriesView: Category.CategoriesView(parent, args),
    CategoryView: Category.CategoryView(parent, args),
    CategoryDelete: Category.CategoryDelete(parent, args),

    LandingDelete: Landing.LandingDelete(parent, args),
    LandingUp: Landing.LandingUp(parent, args),
    LandingDown: Landing.LandingDown(parent, args),
    LandingView: Landing.LandingView(parent, args),
    LandingsView: Landing.LandingsView(parent, args),
  },
  Mutation: {
    UserRegister: User.UserRegister(parent, args),
    UserUpdate: User.UserUpdate(parent, args),
    LandingCreate: Landing.LandingCreate(parent, args),
    LandingUpdate: Landing.LandingUpdate(parent, args),
    CategoryCreate: Category.CategoryCreate(parent, args),
    CategoryUpdate: Category.CategoryUpdate(parent, args),
  },
};

问题原因

你当前是直接调用了resolver函数,而非将函数本身作为resolver赋值给Query/Mutation字段。代码里User.UserDelete(parent, args)这类写法会在定义resolves对象时立即执行函数,此时parent和args变量根本未定义,因此抛出ReferenceError。

解决方法

方法1:直接传入函数引用(推荐)

Apollo Server会在执行查询/变更时自动向resolver函数传入parent、args、context、info四个参数,你只需把函数本身赋值给对应字段即可:

import { User, Landing, Category } from './resolvers';

export const resolves = {
  Query: {
    UserDelete: User.UserDelete,
    UserAuth: User.UserAuth,
    UserView: User.UserView,
    UserLandings: User.UserLandings,

    CategoriesView: Category.CategoriesView,
    CategoryView: Category.CategoryView,
    CategoryDelete: Category.CategoryDelete,

    LandingDelete: Landing.LandingDelete,
    LandingUp: Landing.LandingUp,
    LandingDown: Landing.LandingDown,
    LandingView: Landing.LandingView,
    LandingsView: Landing.LandingsView,
  },
  Mutation: {
    UserRegister: User.UserRegister,
    UserUpdate: User.UserUpdate,
    LandingCreate: Landing.LandingCreate,
    LandingUpdate: Landing.LandingUpdate,
    CategoryCreate: Category.CategoryCreate,
    CategoryUpdate: Category.CategoryUpdate,
  },
};

方法2:箭头函数包裹(适用于需额外处理参数的场景)

如果需要在调用resolver前做参数预处理,可以用箭头函数接收Apollo传递的参数,再手动调用你的resolver:

// 单个字段示例写法
UserDelete: (parent, args, context, info) => {
  // 此处可添加自定义逻辑
  return User.UserDelete(parent, args, context, info);
}

这种写法仅在需要自定义参数时使用,无特殊需求优先用方法1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:25:46