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

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个入参)完全吻合。
修复方案
  1. 首先从miragejs包中导入框架内置的Response类,替换全局原生Response
  2. 保持你原来的参数顺序即可,不需要调整传参,也不需要加@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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:15:33