MirageJS配置500错误响应未触发报错实际返回200状态码问题排查
问题根因
核心问题是调用了错误的Response构造函数:你当前代码里用的是浏览器原生Fetch API提供的全局Response,不是Mirage JS内置的Response类。
原生Response构造函数仅支持2个入参,签名为new Response(body, options):
- 第一个入参是响应体
- 第二个入参是响应配置(包含状态码、响应头等)
你写的new Response(500, {}, { errors: ['The database went on vacation'] })会被原生构造器解析为:
- 响应体传入了数字
500,最终被序列化为字符串[object Number],和你响应日志里的_bodyText值完全对应 - 响应配置传入了空对象,因此状态码默认取200,
ok字段默认为true - 第三个入参被完全忽略,这也和你遇到的TS类型报错(提示构造函数仅支持0-2个入参)完全吻合。
修复方案
- 首先从
miragejs包中导入框架内置的Response类,替换全局原生Response - 保持你原来的参数顺序即可,不需要调整传参,也不需要加
@ts-ignore绕过TS校验
修复后的代码示例:
// 注意必须显式导入Mirage提供的Response import { Response } from 'miragejs'; // routes方法内的路由配置 this.put( '/admin/features/error/environment/test', () => new Response( 500, {}, // 响应头配置,可按需填写 { errors: ['The database went on vacation'] } // 响应体内容 ), );
补充说明:Mirage内置的Response构造函数签名为
new Response(statusCode, headers, body),正好支持你之前写的3个入参顺序,导入正确后TS类型校验会直接通过,接口也会正常返回500状态码和预期的错误响应体。
内容的提问来源于stack exchange,提问作者Jonathan Tuzman
相关产品推荐
相关产品推荐

