通过 Meteor Iron Router 获取 Json / Collection 的最简单方法

Easiest way to get Json / Collection through Meteor Iron Router

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

/ - 应呈现主页模板

/items - 应项目页面模板

/items/weeARXpqqTFQRg275 - 应该 return 来自 MongoDB 且给定 _id

的项目

这是我要实现的目标的示例

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

尝试这样的事情:

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

祝你好运!

你的代码有几个问题。

首先,您似乎想从 url 中获取 _id 参数,但不知道如何获取。它存储在 this.params,所以它是 this.params._id

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

第三,这不是您在 Iron Router 中渲染内容的方式。 render 方法的字符串参数是要呈现的模板的 name,而不是项目。

假设 myItems 是一个有效的集合并且您的模板名为 showItem,您的代码应该类似于:

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