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

使用node-nock模拟含问号(非查询字符串)的URI问题

解决Nock匹配含问号但非查询字符串路径的问题

我之前也碰到过这个坑!Nock默认会把URL里的?当成查询字符串的起始标记,自动拆分路径和查询参数,所以像/index.php?/api/v2/get-item/1这种特殊路径会被它错误拆解,导致匹配失败。下面是两个最靠谱的解决方法:

方法1:启用raw模式禁用URL解析

在创建Nock实例时添加{ raw: true }选项,让Nock不对URL做路径和查询字符串的拆分,直接把整个请求路径(包括?)当作匹配依据:

nock('https://example.com', { raw: true })
  .get('/index.php?/api/v2/get-item/1')
  .reply(200, { data: 'your-item-data' });

这个方法简单直接,适合只需要匹配这类特殊路径的场景,Nock会完全按照你提供的路径字符串做精确匹配,不会做任何解析处理。

方法2:使用URI匹配函数

如果你不想全局禁用URL解析,可以给get()方法传入自定义判断函数,手动校验完整的请求URI:

nock('https://example.com')
  .get((uri) => uri === '/index.php?/api/v2/get-item/1')
  .reply(200, { data: 'your-item-data' });

这个函数会接收请求的完整URI(包含?及后续内容),你可以在这里做精确匹配,甚至编写更复杂的判断逻辑,灵活性更高。

为什么URI编码没用?

你提到试过URI编码,但Nock内部会自动对请求URI做解码处理——哪怕你传入/index.php%3F/api/v2/get-item/1,它还是会转成带?的路径,然后继续按默认逻辑拆分,所以这个方法行不通。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:56:13