GraphQL resolver 断点不命中,主因是 VS Code 未正确 attach 到 Node 进程;需匹配启动方式配置 launch.json(attach/launch)、端口、sourcemap 路径,并在 .redwood/functions/graphql.js 上设断点,确保 schema 加载成功。

GraphQL resolver 断点不命中?先确认调试器连上了 Node 进程
断点灰掉、F5 按了没反应、控制台没输出——根本不是代码写错了,而是 VS Code 根本没 attach 到正在运行的 GraphQL 服务进程。
常见错误现象:Debugger attached 日志没出现、断点左侧红点变空心、console.log 有输出但 debugger 语句不暂停。
- 如果用
yarn redwood dev或npm run dev启动(通常含nodemon),必须配"request": "attach",且"port"必须和启动时实际暴露的--inspect端口一致,比如--inspect=9229→ launch.json 里就得写"port": 9229 - 如果手动执行
node --inspect api/src/functions/graphql.ts,就该用"request": "launch","program"指向该文件路径 - 别信“自动检测端口”——VS Code 不会猜你用了
ts-node还是esm;ts-node项目还得加"runtimeArgs": ["-r", "ts-node/register"]
Redwood.js 项目里 resolver 断点打在哪?别在源码目录直接点
你在 api/src/services/user.ts 里点断点,几乎一定不生效。Redwood 的 GraphQL resolver 实际运行的是 .redwood/functions/graphql 打包后的 JS 文件,源码只是开发入口。
实操建议:
- 断点优先打在
api/src/functions/graphql.ts的handler函数开头——这里能捕获所有请求,验证调试通道是否通 - 再往下进 resolver,必须确保已执行过
yarn redwood build api(或yarn redwood dev已触发重建),生成有效的.map文件 -
launch.json中"outFiles"必须包含"./.redwood/functions/**/*",否则 sourcemap 匹配失败,断点无法回溯到 TS 源码
带鉴权的 GraphQL 请求怎么发?GraphQL Request 插件不支持 header
你在 .graphql 文件里写 # Authorization: Bearer xxx 注释,请求照样 401——GraphQL Request(jimmydief 版)压根不解析任何注释里的 header,Content-Type 都是硬编码的。
正确做法:
- 换用
Thunder Client:新建auth-query.http,显式写Authorization: Bearer {{token}},变量存环境避免硬编码 - 调试时断点不能打在 resolver 函数第一行——鉴权中间件(如
context函数)可能提前 return 或 throw,得先确认req.headers.authorization被正确提取 - 如果用 Keystone 或 Apollo Server 封装了
graphQLContext,断点要设在该函数返回之后、resolver 执行之前的位置
Schema 没加载成功,跳转和补全全失效
Ctrl+Click 跳不到字段定义、参数没提示、右下角状态栏显示 GraphQL: disconnected——问题不在插件,而在 schema 根本没加载。
关键检查点:
- 必须安装
GraphQL for VSCode(Prisma Labs 出品),卸载Apollo GraphQL(它会卡住状态栏并反复报Unable to load schema from graphql.config.yml) -
.graphqlrc或graphql.config.js必须放在项目根目录;schema字段路径必须用正斜杠,schema: schema/schema.graphql合法,schema: schema\schema.graphql是 YAML 语法错误 - Output 面板切换到
GraphQL通道,必须看到Loaded schema from ./schema.graphql才算真正就绪
多文件 schema 要写成数组:"schema": ["schema/types.graphql", "schema/resolvers.graphql"],单字符串只读第一个。


















