我有一个MongoDB服务器,它有一个与之交互的NodeJS服务器。我希望Ember Store从这台服务器获取数据。一个教程引导我直到这一点,但它对我不起作用(tutorial),我认为它已经过时但我不确定。 后端服务器的这一部分是关于发送数据:
app.get('/api/appointments', function(req, res){
AppointmentModel.find({}, function(err, docs){
if(err) res.send({error:err});
else res.send({data:docs, "type":"appointment"});
});
});
curl请求证明它确实有效:
curl http://localhost:4500/api/appointments
{"data":[{"flags":[],"dates":[],"invited":[],"_id":"5adc8b6724a69f4327c4c7af","author":7,"title":"Does this work"}],"type":"appointment"}
这是向服务器发出请求的余烬代码的一部分:
export default Route.extend({
model: function(){
return this.store.findAll('appointment');
}
});
这是我在webbrowser(chrome)控制台中遇到的错误:
Error while processing route: index Assertion Failed: Encountered a resource object with an undefined type (resolved resource using (unknown mixin)) Error: Assertion Failed: Encountered a resource object with an undefined type (resolved resource using (unknown mixin))
at new EmberError (http://localhost:4200/assets/vendor.js:24475:25)
at Object.assert (http://localhost:4200/assets/vendor.js:24725:15)
at Class._normalizeResourceHelper (http://localhost:4200/assets/vendor.js:85052:61)
at Class._normalizeDocumentHelper (http://localhost:4200/assets/vendor.js:84993:25)
at Class._normalizeResponse (http://localhost:4200/assets/vendor.js:85121:36)
at Class.normalizeArrayResponse (http://localhost:4200/assets/vendor.js:86013:19)
at Class.normalizeFindAllResponse (http://localhost:4200/assets/vendor.js:85873:19)
at Class.normalizeResponse (http://localhost:4200/assets/vendor.js:85816:23)
at normalizeResponseHelper (http://localhost:4200/assets/vendor.js:76037:39)
at promise.then.adapterPayload (http://localhost:4200/assets/vendor.js:76889:19)
因为错误是类型的问题,我检查并再次检查模型,但没有发现任何会产生错误的内容。 烬:
export default DS.Model.extend({
author: DS.attr('number'),
title: DS.attr('string'),
description: DS.attr('string'),
flags: DS.hasMany('number'),
dates: DS.hasMany('date'),
invited: DS.hasMany('number')
});
的NodeJS /蒙戈:
//The schema for appointments
var appointmentSchema = new mongoose.Schema({
author: Number, //Userid of the owner of the appointment.
title: String,
description: String,
flags: [Number], //Array of ids of flags that are set.
dates: [Date],
invited: [Number] //Array of user ids.
});
var AppointmentModel = mongoose.model('appointment', appointmentSchema);
ember以什么特殊方式需要数据才能正确处理它?</ p>
我已经阅读了一些关于存储和余烬的文档,但我仍然是框架的新手,非常感谢任何帮助。
答案 0 :(得分:2)
首先,您需要了解ember数据模型定义。这没有意义:
flags: DS.hasMany('number'),
这基本上意味着*约会有多个标志,它们属于模型number
。您不能将hasMany
或belongsTo
用于数组或基本类型。
现在你有两个选择。您可以为标志,人员(邀请)等创建模型,也可以返回简单的JSON结构。为此指定attr()
(没有给出参数)。
您的下一个问题是,默认情况下,ember会假定为jsonapi
,但您并未发送jsonapi
。您可以在此处移至服务器上的jsonapi
,也可以将serializer修改为here。
然而考虑到所有这些,我得出结论,你可能根本不想使用ember-data
。 ember-data
对于具有关系且基于模型的数据非常有用,但如果没有它,则可以使用ember
。
你可以这样做:
model() {
return $.getJSON('/api/appointments');
}
然后按照您要发送的普通JSON进行操作。
如果您想使用ember-data
或完全取决于您的使用案例。
答案 1 :(得分:0)
从我可以看到你使用错误的适配器,你的后端正在使用JSONAPI规范http://jsonapi.org/,但是ember期待REST,这就是type属性失败的原因,你只需要更改适配器从REST到JSONAPI,在这里你可以找到更多信息https://guides.emberjs.com/v3.0.0/models/customizing-adapters/在你的情况下它应该非常简单只需将适配器更改为JSONAPIAdapter