2017-07-31 54 views
0

我試圖通過構建一個Web應用程序使用前端的框架和node.js爲後端以及mongoDB學習Ember.js作爲數據庫。不使用Ember.js使用查詢()方法檢索任何信息使用查詢()方法

我正在使用/試圖使用該網址提供參數ID,然後查詢該ID。

我無法從我的模型中獲取信息。當我使用findAll()時,我的查詢工作正常。但是,當我切換到find()或query()時,我無法檢索任何結果。

我看過的所有文檔都使用了我嘗試過的不同語法,但都沒有工作。

我將不勝感激任何提示或輸入。謝謝。

應用程序/ router.js

Router.map(function() { 
     this.route('stock', { path: '/:stock_id' }); 
    }); 

應用程序/路由/ stock.js

export default Ember.Route.extend({ 
     model: function(params) { 
     this.store.query('stock', {filter:{id : params.stock_id}}).then(function(stock){return stock.get('firstObject')}); 
     } 
    }); 

應用程序/模型/ stock.js

export default DS.Model.extend({ 
     Symbol: DS.attr('string'), 
     Name: DS.attr('string'), 
     LastSale: DS.attr('string'), 
     MarketCap: DS.attr('string'), 
     IPOyear: DS.attr('string'), 
     Industry: DS.attr('string') 
    }); 

應用程序/串行器/股。 js

export default DS.RESTSerializer.extend({ 
     primaryKey: '_id', 
     serializeId: function(id) { 
      return id.toString(); 
     } 
    }); 

應用程序/模板/ stock.hbs

{{#each model as |item|}} 
    <h3>{{item.Name}}</h3> 
    {{/each}} 

我的服務器的NodeJS

 app.get('/api/stocks/:id', function(req, res){ 
     StockModel.findOne({'_id': req.params.id},function(err,docs){ 
      console.log(docs.symbol); 
      if(err){ 
       res.send({error:err}); 
      } 
      else{ 
      res.send({stock:docs}); 
      } 
     }); 
    }); 
+0

模型鉤子應該返回的結果 – kumkanillam

+0

謝謝你的迴應,從我的理解,我不能這樣做已經是我上面的應用程序/路由/ stock.js路線中? – Rbutler93

+0

您錯過了'model()'中的'return'! – alizahid

回答

1

模型鉤子應該返回的結果,只有那麼這將在model被設置在通過setupController方法鉤相應的控制器。

model: function(params) { 
     return this.store.query('stock', {filter:{id : params.stock_id}}).then(function(stock){return stock.get('firstObject')}); 
     } 

更新: 您的模型字段的名稱應遵循駝峯格式

// app/models/stock.js 
export default DS.Model.extend({ 
symbol: DS.attr('string'), 
name: DS.attr('string'), 
lastSale: DS.attr('string'), 
marketCap: DS.attr('string'), 
iPOyear: DS.attr('string'), 
industry: DS.attr('string') 
}); 

,並保證,你的後臺是接受filter,並在下面的格式返回所要的結果,

"stocks": [ 
{ 
    "id": 1, 
    "symbol": "foo", 
    "name": "foo", 
    "lastSale": "foo", 
    "marketCap": "foo", 
    "iPOyear": "foo", 
    "industry": "foo" 
}] 
+0

謝謝,這是一個錯字。我仍然無法從模型中檢索數據。我只能在使用findAll()時檢索數據,但是它會從數據庫中檢索所有元素,而我只想使用從url參數傳遞的id檢索一個特定元素。 – Rbutler93

+0

只需確保查詢返回正確的有效響應。 – kumkanillam

+0

我把結果輸出到控制檯,並得到一堆數據沒有靠近我想要的地方。我注意到,只要輸入網址(我。e localhost/id)我會自動調用我的node.js服務器並檢索正確的信息。我似乎無法在模型鉤子內抓住它。 – Rbutler93

0

您需要return來自mo的查詢德爾。更新您的app/routes/stock.js看起來像

export default Ember.Route.extend({ 
    model(params) { 
    return this.store 
     .query('stock', { 
     filter: { 
      id: params.stock_id 
     } 
     }) 
     .then(stock => stock.get('firstObject')) 
    } 
}) 
+0

FYI:'.then(stock => stock.get('firstObject'))'和'.then(function(股票){return stock.get('firstObject')})'都是一樣的。但它很好,你使用的是ES6功能,但這在解決問題中並不起主要作用。 – kumkanillam

+0

剛剛加了'return'。休息全部清理乾淨。 – alizahid

+0

好吧,但OP反應只是錯字我的答案! – kumkanillam