Javascript 不使用query()方法使用Ember.js从模型中检索任何信息

Javascript 不使用query()方法使用Ember.js从模型中检索任何信息,javascript,node.js,ember.js,routes,ember-data,Javascript,Node.js,Ember.js,Routes,Ember Data,我试图通过使用前端的框架和后端的node.js以及作为数据库的mongoDB构建一个web应用程序来学习Ember.js 我正在使用/试图使用url输入参数id,然后查询该id 我很难从我的模型中获取信息。当我使用findAll时,我的查询工作正常。但是,当我切换到查找或查询时,我无法检索任何结果 我看过的所有文档都使用了我尝试过的不同语法,但没有一个有效 如果有任何提示或意见,我将不胜感激。多谢各位 app/router.js Router.map(function() {

我试图通过使用前端的框架和后端的node.js以及作为数据库的mongoDB构建一个web应用程序来学习Ember.js

我正在使用/试图使用url输入参数id,然后查询该id

我很难从我的模型中获取信息。当我使用findAll时,我的查询工作正常。但是,当我切换到查找或查询时,我无法检索任何结果

我看过的所有文档都使用了我尝试过的不同语法,但没有一个有效

如果有任何提示或意见,我将不胜感激。多谢各位

app/router.js

    Router.map(function() {
      this.route('stock', { path: '/:stock_id' });
    });
app/routes/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')});
       }
    });
    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')
    });
    export default DS.RESTSerializer.extend({
       primaryKey: '_id',
       serializeId: function(id) {
          return id.toString();
       }
    });
app/models/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')});
       }
    });
    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')
    });
    export default DS.RESTSerializer.extend({
       primaryKey: '_id',
       serializeId: function(id) {
          return id.toString();
       }
    });
app/serializers/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')});
       }
    });
    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')
    });
    export default DS.RESTSerializer.extend({
       primaryKey: '_id',
       serializeId: function(id) {
          return id.toString();
       }
    });
app/templates/stock.hbs

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

模型钩子应该返回结果,只有这样才能通过setupController方法钩子在相应控制器的模型中设置该结果

model: function(params) {
         return this.store.query('stock', {filter:{id : params.stock_id}}).then(function(stock){return stock.get('firstObject')});
       }
更新: 您的模型字段名称应为camelCased

// 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')
});
并确保您的后端正在接受筛选器并以以下格式返回所需结果

"stocks": [
{
    "id": 1,
    "symbol": "foo",
    "name": "foo",
    "lastSale": "foo",
    "marketCap": "foo",
    "iPOyear": "foo",
    "industry": "foo" 
}]
您需要从模型返回查询。更新你的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'))
  }
})

model hook应该返回结果谢谢你的回复,据我所知,我在上面的app/routes/stock.js路径中还没有这样做吗?你错过了model中的返回!谢谢你,那是个打字错误。我仍然无法从模型中检索数据。我只能在使用findAll时检索数据,但这会检索数据库中的所有元素,我只想使用url参数传递的id检索一个特定元素。只需确保查询返回正确的有效响应。我将结果打印到控制台,并获得一堆数据,这些数据不在我想要的附近。我注意到,只要输入url,即localhost/id,我就会自动调用node.js服务器,它会检索正确的信息。我似乎无法在模型钩子中抓住这一点。出于某种原因,我最终能够使用findRecord而不是查询从数据库中获取内部模型的数据。但是,我仍然无法在任何页面上显示这些信息。我不知道节点的内容。别忘了在模型钩子中返回结果,如果重写setupController钩子,那么别忘了调用this.\u super…arguments.FYI:.thenstock=>stock.get'firstObject'和.ThenSfunctionStock{return stock.get'firstObject'}都是相同的。但是,您使用ES6功能是很好的,但这并不是解决问题的主要原因。只是增加了回报。剩下的都收拾干净了。