我正在尝试在浏览器中构建一个EmberJS测试服务器。我有一个API调用“myApiMethod”,我试图获取一个JSON对象。在尝试测试特定方法的响应时,我发现我可以返回原始json对象,或将其包装在Mirage.Response对象中。由于我希望模拟服务器的响应能够反映现实世界,我不确定这两者中的哪一个是更好的主意。
我想知道的是我在Mirage的config.js中的以下两个代码块之间的功能差异:
版本1:
this.get('/myApiMethod', function(param1, param2){
var jsonObject = myFunctionThatReturnsJson(param1, param2);
return jsonObject;
});
VS
版本2:
this.get('/myApiMethod',function(param1, param2){
var jsonObject = myFunctionThatReturnsJson(param1, param2);
return Mirage.Response(200, {}, jsonObject);
});
答案 0 :(得分: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响应代码。 / p>
简而言之,如果您需要的不是默认行为,请使用Mirage.Response
。