1

我正在尝试在浏览器中构建一个 EmberJS 测试服务器。我有一个对“myApiMethod”的 API 调用,我试图从中获取一个 JSON 对象。在尝试测试来自特定方法的响应时,我发现我可以返回原始 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); 
    });
4

1 回答 1

2

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 中的路由处理程序允许您返回纯 JavaScript 对象:

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

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

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

In short, if you need something other than the default behavior, use Mirage.Response.

于 2016-08-26T19:28:35.293 回答