Apollo Server中如何在didReceiveResponse获取parsedURL?
在Apollo Server的didReceiveResponse中访问解析后的URL
可能的原因及解决方法
1. 检查属性名拼写错误
JavaScript是大小写敏感的,你提到的passedURL大概率是拼写错误——通常解析后的URL属性名为parsedUrl(小写u)或者url。尝试直接访问sourceReq.parsedUrl,或者用字符串索引访问(应对不可枚举属性):
console.log(sourceReq['parsedURL']); // 注意匹配打印出来的属性名大小写
2. 手动解析URL
如果Apollo Server没有自动将解析后的URL挂载到请求对象上,你可以用Node.js原生模块手动解析:
// 方式1:使用URL类(推荐) const { URL } = require('url'); // 在didReceiveResponse钩子内 const fullUrl = new URL(sourceReq.url, `http://${sourceReq.headers.host}`); console.log(fullUrl.pathname); // 获取路径 console.log(fullUrl.searchParams); // 获取查询参数 // 方式2:使用url.parse(旧版Node.js兼容) const url = require('url'); const parsedUrl = url.parse(sourceReq.url); console.log(parsedUrl.pathname);
3. 确认请求对象的原始来源
如果你的Apollo Server是集成在Express/Koa等框架上,sourceReq就是对应框架的原生请求对象:
- Express:可以直接使用
sourceReq.originalUrl获取完整原始URL,再配合上述方法解析 - Koa:对应
sourceReq.url,同样可以手动解析
4. 检查属性是否不可枚举
如果打印sourceReq能看到parsedURL但直接访问返回null,可能该属性是不可枚举的。可以通过Object.getOwnPropertyDescriptors(sourceReq)查看属性的描述符,确认是否有getter或者是否可枚举:
console.log(Object.getOwnPropertyDescriptors(sourceReq).parsedURL);
内容的提问来源于stack exchange,提问作者philipfwilson
相关产品推荐
相关产品推荐

