Mirage 的简单 Ember 数据问题(错误:遇到未定义类型的资源对象)

Posted

技术标签:

【中文标题】Mirage 的简单 Ember 数据问题(错误:遇到未定义类型的资源对象)【英文标题】:Simple Ember Data Issue with Mirage (Error: Encountered a resource object with an undefined type ) 【发布时间】:2018-10-30 16:46:08 【问题描述】:

我对 Ember.js 有一些经验,现在正在创建一个新项目,使用 Mirage 暂时存根数据。

我正在逐步检查Ember.js Tutorial,但在查询记录时不断收到此错误:

Encountered a resource object with an undefined type (resolved resource using DS.JSONAPISerializer)

我确实意识到有人问过similar question,但它不包括 Mirage 插件,而且我还研究了该问题中回答的所有技术。


mirage/config.js

export default function() 
  this.namespace = '/api'

  this.get('/todos', function() 
    return 
      data: [
        
          text: 'Bring in garbage cans',
          completed: false,
          timesViewed: 3
        ,
        
          text: 'Look at the plants',
          completed: false,
          timesViewed: 0
        
      ]
    
  )


app/models/todo.js

import DS from 'ember-data';

export default DS.Model.extend(
    text: DS.attr(),
    completed: DS.attr(),
    timesViewed: DS.attr()
);

app/routes/index.js

import Route from '@ember/routing/route';

export default Route.extend(
    model() 
        return this.store.findAll('todo')
    
);

app/adapters/application.js

import DS from 'ember-data';

export default DS.JSONAPIAdapter.extend(
    namespace: 'api'
);

我一直在以各种方式格式化来自 Mirage 的响应,甚至在键上加上双引号,但这不应该是必要的,因为我相信 mirage 会序列化它。

对我在这里缺少的任何帮助表示感谢。

【问题讨论】:

【参考方案1】:

我认为您面临的问题是由于您的 mirage 数据未按照 JSON-API 规范进行格式化。

mirage/config.js =>

export default function() 
this.namespace = '/api'

this.get('/todos', function() 
  return 
    data: [
      
          type: "todos",
          id: 1,
          attributes: 
          text: "Bring in garbage cans",
          completed: false,
          timesViewed: 3
          
      ,
      
          type: "todos",
          id: 2,
          attributes: 
          text: "Look at the plants",
          completed: false,
          timesViewed: 0
          
      
      ]
  
);

试用此代码,看看问题是否已解决。

如果您正在寻找一种根据 JSON-API 规范动态生成海市蜃楼数据的方法,请参阅此示例代码 -> sample code for dynamic mirage data!干杯?

【讨论】:

我不明白为什么需要您的动态海市蜃楼数据示例代码。 Mirage 支持工厂,允许使用场景播种数据库,并且具有类似这样的简单路线的简写。 @jelhan 你说得对,工厂支持这一点,如果你正在寻找快速的东西,这只是一个手动实现。 我认为使用 mirage 的默认设置会更快,代码更少。

以上是关于Mirage 的简单 Ember 数据问题(错误:遇到未定义类型的资源对象)的主要内容,如果未能解决你的问题,请参考以下文章

使用 ember-cli-mirage 测试错误响应

ember-cli-mirage 和 babel 错误

Ember cli mirage 错误:补丁处理程序无法读取 null 的属性更新

Ember Mirage 没有将模型作为 ember 对象传递

Ember 数据模型中的计算属性不适用于 ember-cli-mirage 模型

来自 Mirage 的 Ember 数据无法在 index.hbs 上显示