Bug Summary
在 console(MSW 模式)中通过 GET /api/v1/data/contact?... 访问时,filter/sort/top 等查询参数全部失效,返回所有数据,server 模式下行为正常。
复现方式
- 启动 dev server (
pnpm dev)。
- 访问
/api/v1/data/contact?top=100&sort=name&filter=["priority","=","medium"]。
- 发现过滤条件没有生效,返回所有数据。
- 同样接口在
pnpm dev:server 下过滤正常。
问题分析
apps/console/src/mocks/handlers.ts 的 Data handler 直接调用 driver.find,不经过 ObjectStack 协议 protocol 层,相当于绕过 query 解析和 filter/sort/top 的标准化。
- Metadata handlers 是调用 protocol 服务的,所以 server/MSW 是一致的。
- Data handlers 需要像 Metadata 一样调用 protocol 服务,不能直接 driver。
- filter/sort/top 等参数解析/标准化只能在协议层统一做,否则容易分叉。
最佳解决方案
- MSW 模式下 Data handler 应直接 proxy 转发到 protocol 服务(如同 Metadata handler)。这样 MSW 路径和 server 路径完全一致,filter/sort/top/query/pagination 所有解析/支持都自动同步。
- handler 不应处理任何业务参数,只做 HTTP ↔ protocol 的适配,不做 query params 到 driver.find 的手动映射。
问题代码片段
http.get(`${prefix}${baseUrl}/data/:objectName`, async ({ params, request }) => {
const url = new URL(request.url);
const query: any = {};
url.searchParams.forEach((value, key) => {
try {
query[key] = JSON.parse(value);
} catch {
query[key] = value;
}
});
const response = await driver.find(params.objectName as string, query);
return HttpResponse.json({ value: response }, { status: 200 });
}),
建议修复
// 直接转发给 protocol data 服务,不做 query 解析
const response = await protocol.getData({ object: params.objectName, query: url.search });
- 或者统一处理:参考 Metadata handler 的实现,把所有 data CRUD 都走 protocol。
影响分析
- 目前所有通过 MSW dev 的 Data CRUD 均未经过协议栈,filter/sort/top 都失效,实际测试 server/dev 下表现完全不同。
- 长期维护风险:业务协议变更容易遗漏 MSW handler。
开发任务完成之后都应该运行test,并且相关的问题,然后更新roadmap。
Bug Summary
在 console(MSW 模式)中通过
GET /api/v1/data/contact?...访问时,filter/sort/top 等查询参数全部失效,返回所有数据,server 模式下行为正常。复现方式
pnpm dev)。/api/v1/data/contact?top=100&sort=name&filter=["priority","=","medium"]。pnpm dev:server下过滤正常。问题分析
apps/console/src/mocks/handlers.ts的 Data handler 直接调用 driver.find,不经过 ObjectStack 协议 protocol 层,相当于绕过 query 解析和 filter/sort/top 的标准化。最佳解决方案
问题代码片段
建议修复
影响分析
开发任务完成之后都应该运行test,并且相关的问题,然后更新roadmap。