通过流星铁路由器获取Json / Collection的最简单方法

时间:2015-06-09 14:31:32

标签: javascript mongodb meteor iron-router

我正在创建一组路线,例如

/ - 应该呈现主页模板

/items - 应该是商品页面模板

/items/weeARXpqqTFQRg275 - 应该使用给定的_id

从MongoDB返回项目

这是我正在努力实现的例子

Router.route('items/:_id', function () {
  var item = return myItems.find(:_id);
  this.render(item);
});

[更新 - 已解决] 通过在服务器端使用Router.map而不是Router.route

来解决此问题
Router.map(function () {
  this.route('post', {
    path: 'items/:_id',
    where: 'server',
    action: function(){
      var id = this.params._id;
      var json = myItems.findOne({_id: id});
      this.response.setHeader('Content-Type', 'application/json');
      this.response.end(JSON.stringify(json, null, 2));
    }
  });
});

2 个答案:

答案 0 :(得分:2)

您的代码存在一些问题。

首先,您似乎想从网址获取_id参数并且不知道如何。它存储在this.params上,因此它this.params._id

其次,您应发送给find的第一个参数是MongoDB查询,在您的情况下为{ _id: this.params._id }

第三,那不是你在铁路由器中呈现内容的方式。 render方法的字符串参数是要呈现的模板的名称,而不是项目。

假设myItems是一个有效的集合,而您的模板名为showItem,那么您的代码应该是这样的:

Router.route('items/:_id', {
  name: 'showItem',
  data: function () {
    return myItems.find({ _id: this.params._id });
  }
});

答案 1 :(得分:0)

尝试这样的事情:

Router.map(function () {
    this.route('items/:myItemId', {
        data: function(){
            return myItems.findOne({_id: this.params.myItemId});
        }
    });
});
祝你好运!