通过 Mirage 返回 Mirage.Response 对象与返回原始 JSON 对象有什么区别?

What is the difference between returning a Mirage.Response object vs returning a raw JSON object through Mirage?

我正在尝试在浏览器中构建一个 EmberJS 测试服务器。我有一个 API 调用 "myApiMethod",我试图从中获取一个 JSON 对象。在尝试测试特定方法的响应时,我发现我可以 return 原始 json 对象,或将其包装在 Mirage.Response 对象中。因为我希望模拟服务器的响应能够反映真实世界,所以我不确定这两者中哪一个更好。

我想知道的是我的 Mirage config.js 中的以下两段代码之间的功能差异:

版本 1:

    this.get('/myApiMethod', function(param1, param2){
        var jsonObject = myFunctionThatReturnsJson(param1, param2);
        return jsonObject;
    });

对比

版本 2:

    this.get('/myApiMethod',function(param1, param2){
        var jsonObject = myFunctionThatReturnsJson(param1, param2);
        return Mirage.Response(200, {}, jsonObject); 
    });

Mirage 在幕后使用 Pretender.js 伪造 XHR 响应。 Pretender 本身对响应类型没有意见,因此在使用 JSON 响应时,您需要手动将其字符串化。这是文档中的示例:

this.get('/photos/:id', function(request) {
  return [200, {"Content-Type": "application/json"}, JSON.stringify(PHOTOS[request.params.id])]
});

Mirage 最初的决定之一是假设,大多数时候,人们希望用 JSON 来回应。因此,Mirage 中的路由处理程序让您 return plain JavaScript objects:

this.get('/photos/:id', () => {
  return [{ id: 1, url: 'lorempixel.com/100/100' }];
});

Mirage 负责将响应字符串化并设置适当的 ContentType header。

Mirage.Response object 是为想要自定义响应的人添加的,可以使用不同的内容类型进行响应,更改 header 或使用不同的 HTTP比给定动词的默认响应代码。

简而言之,如果您需要默认行为以外的东西,请使用 Mirage.Response