Ember + Mongoose没有返回记录

时间:2016-12-13 19:12:12

标签: json node.js express ember.js mongoose

我遇到了ember和模型的问题,因为我想使用Express从Mongoose API返回一个JSON,问题是路由正确地返回了json,但是当我试图在前端抓住它(Ember),它像null一样返回。

在我的Ember路线中,我有以下内容:

import Ember from 'ember';

export default Ember.Route.extend({
  model: function(params){ //i'm getting params from the url as a paremeter
    return Ember.RSVP.hash({

      questions: this.store.find('examGroupQuestion/show-q', params.questionsGroup_id)
    });
  }
});

重要的是这条路线是来自另一条路线的孩子,接下来我会告诉你路由器:

import Ember from 'ember';
import config from './config/environment';

const Router = Ember.Router.extend({
  location: config.locationType,
  rootURL: config.rootURL
});

Router.map(function() {
 this.route('examGroupQuestion',function() {
   this.route('showQ',{
     path: 'showQ/:questionsGroup_id'
   });
 });
});
export default Router;

最后这是我的模特:

import Model from 'ember-data/model';
import attr from 'ember-data/attr';

export default Model.extend({ 
/* the atributte array it's defined in a transform */
  description: attr('string'),
  matrix_eval: attr('array'),
  level: attr('string'),
  rows: attr('array'),
  randomize_row: attr('boolean'),
  columns: attr('array'),
  randomize_col: attr('boolean'),
});

有了这个,我们正在尝试将json从路由模型传递给模板,但是记录总是显示它为空,就像在下一个图像中我们可以看到REST服务器响应和错误:

This is the error that Ember returns

在REST服务器中,我有这条路线:

router.route('/examGroupQuestion/showQs/:qid').get(function(req,res){ questions_group.getQuestions(req,res, req.params.qid); });

在api我有以下内容:

module.exports.getQuestions = function(req,res,id){
  QuestionGroup.findById(id).exec(function(err, questiongroup){
    if(err)
    {
      res.send(err);
    }

    function done(result){
      res.json({questionsGroup:result});
    }

    var result = [];
    var l = questiongroup.questions.length;
    for(var j = 0; j < l; j++)
    {
      (function(j){
        Questions.findById(questiongroup.questions[j].id).exec(function(err, questions){
          if(err)
          {
            res.send(err);
          }
          result.push(questions);
          if(l === j+1)
          {
            done(result);
          }
        });
      })(j);
    }
  });
};

有谁知道为什么会发生这种情况,感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

findRecord(modelName,id,options)承诺

此方法返回给定类型和id组合的记录。对于给定的类型和id,findRecord方法将始终使用相同的对象解析其promise。 findRecord方法将始终返回将使用记录解析的承诺。

将路线改为

import Ember from 'ember';

export default Ember.Route.extend({
  model(params) {
    return this.store.findRecord('examGroupQuestion/show-q', params.questionsGroup_id);
  }
});

确保这是正确的型号&#39; examGroupQuestion / show-q&#39;

如果该记录尚未可用,则商店将要求适配器的find方法查找必要的数据。如果记录已存在于存储中,则它取决于返回的promise解析时的重新加载行为。