我想订阅特定网页上的数据,因此我将subscribe()
放在router.js
内。我不确定是否应将其封入Meteor.isClient()
块内。我是不是该?我什么时候会为服务器端做路由?
Router.route('/courses/:_id', function () {
if (Meteor.isClient) {
Meteor.subscribe("comments");
}
this.render('CourseDetail', { .. });
});
答案 0 :(得分:0)
无需使用Meteor包装器。 Iron路由器有自己的语法,用于说明您希望路由运行的位置。
这是一个例子。
Router.route('/item', function () { var req = this.request; var res = this.response; res.end('hello from the server\n'); }, {where: 'server'});
这是docs网站。
https://github.com/iron-meteor/iron-router/blob/devel/Guide.md
答案 1 :(得分:0)
您应该在铁路由器路由的onBeforeAction选项中定义订阅。
Router.route('/courses/:_id', function () {
onBeforeAction: function () {
Meteor.subscribe("comments");
},
action: function (){
this.render('CourseDetail', { .. });
}
});
答案 2 :(得分:0)
您可以简单地删除该检查,并将文件放在应用程序目录中的顶级if (Meteor.isClient){}
文件夹中,而不是将router.js
检查放在client
文件中。这样,您根本不必担心在服务器上处理您的路由。在进行更改时,您可以通过以下两种方式之一构建上面的路径定义:
Router.route('/courses/:id', function() {
this.wait(Meteor.subscribe('comments')); // Either this one
this.subscribe('comments').wait(); // or this one. DO NOT DO BOTH.
if(this.ready()) {
this.render();
} else {
this.render('CourseDetail');
}
});
或:
Router.route('/courses/:id', {
subscriptions: function() {
this.subscribe('comments');
},
action: function() {
this.render('CourseDetail');
}
});
请注意,第一个选项将函数作为第二个参数传递给Router.route()
函数,而第二个选项将一个对象作为第二个参数传递给Router.route()
函数。这两个选项都完全有效。有关第一个选项的信息,请检查this;有关第二个选项的信息,请检查this。
至于何时进行服务器端路由,如果要为外部应用程序设置应用程序的HTTP请求/响应部分以访问服务器,通常会执行此操作。除非是这种情况,否则您很可能永远不必担心设置这样的事情。但是,在执行此操作的情况下,您将定义路由并将它们放在应用程序目录的顶级server
文件夹中。有关服务器端路由的信息,请检查this输出。