2016-12-13 286 views
0

那麼我有一個問題,因爲我想從一個Mongoose API返回一個JSON,使用Express,問題是路由返回JSON正確,但是當我試圖在前端捕捉它(Ember)時,它會返回null狀態。Ember + Mongoose不返回記錄

在我的餘燼路線,我有以下幾點:

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

有誰知道它爲什麼會發生,任何幫助它的讚賞。

回答

0

findRecord(MODELNAME,ID,選項)無極

此方法返回對於給定類型和id組合的記錄。對於給定類型和id,findRecord方法將始終使用同一對象來解決其承諾。 findRecord方法將始終返回將與記錄解決的承諾。

路線更改爲

import Ember from 'ember'; 

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

只要確定這是正確的模式「examGroupQuestion /節目-Q」

如果記錄尚不可用,店裏會要求適配器的find方法找到必要的數據。如果該記錄已存在於商店中,則取決於返回的承諾解決時的重新加載行爲。

+0

看起來沒問題,但findRecord函數只能獲得一個具有特定模型的記錄,事情是我返回了一組promise,並且我需要獲取所有這些記錄,因爲每個promise都帶有問題數據內。 –

+1

以及你可以使用'query',這個方法委託一個查詢到適配器。這是適配器級語義暴露給應用程序的地方。例如:store.query('person',{ids:[1,2,3]}); – Majid