【问题标题】:Ember+Mongoose doesn't return recordsEmber+Mongoose 不返回记录
【发布时间】:2017-04-28 23:16:20
【问题描述】:

嗯,我遇到了 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 服务器响应和错误:

在 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);
    }
  });
};

有谁知道为什么会这样,感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

    findRecord (modelName, id, options) Promise

    此方法返回给定类型和 id 组合的记录。 findRecord 方法将始终使用给定类型和 id 的相同对象来解决其承诺。 findRecord 方法将始终返回一个承诺,该承诺将与记录一起解决。

    改变你的路线到

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

    只需确保这是正确的模型“examGroupQuestion/show-q”

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

    【讨论】:

    • 看起来没问题,但是函数findRecord 只获取一个特定模型的记录,我正在返回一组承诺,我需要获取所有承诺,因为每个promise 带有问题数据。
    • 你可以使用query,这个方法将查询委托给适配器。这是向应用程序公开适配器级语义的地方。示例:store.query('person', { ids: [1, 2, 3] });
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    相关资源
    最近更新 更多