处理路线时出错:index Assertion Failed:您必须包含一个“id”

我正在做一个城市仪表板的结束学位项目。 我是usin: – PostgreSQL作为DB – Node.js + Express.js + Massive.js作为服务器 – Ember.js作为客户端应用程序

其实,我正在testing如果我可以从DB到Ember的数据,但我得到下一个错误(我已经尝试几乎每个解决scheme,我在这里find):

处理路由时出错:索引断言失败:您必须在传递给'push'的对象中包含一个'id'错误:断言失败:您必须在传递给'push'的对象中包含一个用于poblacio的'id'

这些是我的文件:

server.js (只是一个部分)

router.route('/poblacios') .get(function(request, response) { db.poblacio.find({}, function(err, res){ response.json(res); }); }); app.use('/api/v1/', router); 

适配器/ application.js中

 import DS from 'ember-data'; export default DS.JSONAPIAdapter.extend({ namespace: 'api/v1' }); 

路线/ application.js中

 import Ember from 'ember'; export default Ember.Route.extend({ model() { return this.store.findAll('poblacio'); } }); 

车型/ poblacio.js

 import DS from 'ember-data'; export default DS.Model.extend({ anny: DS.attr('number'), districte: DS.attr('number'), barri: DS.attr('string') }); 

串行器/ poblacio.js

 import DS from 'ember-data'; export default DS.JSONAPISerializer.extend({ primaryKey: 'id', normalizeFindAllResponse(store, type, payload) { return { data: { id: payload.id, type: type.modelName, attributes: { anny: payload.anny, districte: payload.districte, barri: payload.barri, } } }; } }); 

localhost:3000 / api / v1 / poblacios按地区,社区和年份返回0到95年以上的女性和男性人数,每行代表一个id:

 [{"id":1,"anny":2015,"districte":1,"barri":"1. el Raval","donesanys0":206,"donesanys1":212,"donesanys2":206,"donesanys3":247.... {"id":2,"anny":2015,"districte":1,"barri":"2. el Barri Gotic","donesanys0":48,"donesanys1":53... .... {"id":657,"anny":2007,"districte":10,"barri":"73. la Verneda i la Pau","donesanys0":103,"donesanys1":118,"donesanys2":123,"donesanys3":107... 

谢谢你的帮助!

如果您使用JSONAPIAdapter ,则需要遵循JSON API规范 。

根据规范,上面的JSON应该类似于:

 { data: [ ... collection of resource objects ] } 

这就是问题所在,你的有效负载是一个数组,因此一个有效的解决scheme将是:

 import DS from 'ember-data'; export default DS.JSONAPISerializer.extend({ primaryKey: 'id', normalizeFindAllResponse(store, type, payload) { return { data: payload.map((el) => { return { id: el.id, type: type.modelName, attributes: { /* the attributes you need from el */ } } }) }; } }); 

希望这可以帮助。