Mirage + JSONAPI数组

时间:2017-08-03 19:42:10

标签: ember.js ember-data ember-cli-mirage

我有一个像这样设置的基本api ......

/api/v1/logs/
/api/v1/logs/type1-logs
/api/v1/logs/type2-logs
/api/v1/logs/type3-logs

他们每个人都只支持GET,如果用户向/ api / v1 / logs发出请求,他们应该获取所有日志。

我在Mirage中设置了工厂和场景,但我不确定如何实际返回不同类型的数组。

我当前的config.js导致ember抱怨未定义的资源类型。

  this.get('/logs', function(db, request) {
    let data = {
      data: [
        db.type1Logs,
        db.type2Logs,
        db.type3Logs
      ]
    };
    return data;
  });

我做错了什么?

1 个答案:

答案 0 :(得分:0)

在mirage的config.js中,从典型路由定义(返回多个数据)返回的内容是Collection类型。这意味着您需要返回一个集合。所以......类似于以下应该工作:

import { Collection } from 'ember-cli-mirage';

export default function() {
    this.get('/logs', function(db, request) {
        let models = Ember.A();
        models.pushObjects(db.type1Logs.all().models);
        models.pushObjects(db.type2Logs.all().models);
        models.pushObjects(db.type3Logs.all().models);

        return new Collection('log', models);
    });
}

我最初误解了您的问题并采用了不同的方法来创建所有日志并过滤类型,并为您创建了以下twiddle。但后来我意识到你为每种类型创建了不同的数据,你需要的只是合并所有这些数据。然后我决定将type2和type3日志合并到我准备的旋转中。您可以在mirage/config.js定义下的this.get('/logs/type2type3-logs', function(schema){....}内查看我在上面提供的代码示例。我希望这会对你有所帮助。