例如,我有一个Posts
集合,userId
表示此帖子属于谁。
我有这样的路线:
Router.route('/:username/posts', {
waitOn: function(){
return Meteor.subscribe('posts', username); // A
// var user = Meteor.users.find({username: username}); //B
// if(user) {
// return Meteor.subscribe('posts', user._id);
// } else {
// return null; // ???
// }
}
});
并发布
Meteor.publish("posts", function(userId){ // C
check(userId, String);
return Posts.find({userId: userId});
});
Meteor.publish("posts", function(username){ // D
check(username, String);
if(user) {
return Posts.find({userId: user._id});
} else {
return null; // ???
}
});
我很困惑如何处理GET /notexistusername/posts
??
答案 0 :(得分:0)
您可以全局或按路由为铁路由器配置 notFoundTemplate 。
全局:
Router.configure({
layoutTemplate: 'layout',
notFoundTemplate: 'notFound',
loadingTemplate: 'loading'
});
在特定路线中(我也清理了路线代码):
Router.route('/:username/posts', {
notFoundTemplate: 'notFound',
data: function(){
var userId = Meteor.users.find({ username: this.params.username })._id;
return Posts.find({ userId: userId });
},
waitOn: function(){
var userId = Meteor.users.find({ username: this.params.username })._id;
return Meteor.subscribe('posts', userId);
}
});
您的 notFound 模板通常是您的404页面。
您还可以将出版物简化为:
Meteor.publish("posts", function(username){
check(username, String);
return Posts.find({username: username});
});
因为如果没有匹配,find将返回一个空游标,这将告诉路由没有数据。