通过 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 });
}
});
我正在创建一组路线,例如
/
- 应呈现主页模板
/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 });
}
});