我正在使用 Meteor 和 Meteor Router 在我的测试应用程序中提供路由。这是我之前的问题的后续:使用 Meteor,是否有可能拥有“动态路线”?
现在,我已经实施了在该问题中提供给我的答案。我的路线现在看起来像这样:
Meteor.Router.add({
'/:type/:name': function(type, name) {
//just checking the type and name are correct!
console.log("type: " + type);
console.log("name: " + name);
var activity = Activities.findOne({name: name});
Session.set("currentActivity", activity._id);
return 'itemPage';
},
//more entries here
});
此时,浏览器中的 URL 可能类似于:
http://localhost:3000/bar/someCoolBar
当我在主页上并单击链接以访问 itemPage 时,此代码可以正常工作。Activitiy.findOne 成功找到正确的活动,我可以检索活动._id。
但是,如果我手动刷新页面,或者如果我在浏览器地址栏中手动输入该 URL 以直接转到该 itemPage,则会收到以下错误:
Uncaught TypeError: Cannot read property '_id' of undefined client.js:34
Meteor.Router.add./:type/:name client.js:34
(anonymous function) router_client.js:59
(anonymous function) router_client.js:31
_.extend._compute deps.js:129
Deps.Computation deps.js:64
_.extend.autorun deps.js:255
Router._setPageFn router_client.js:23
(anonymous function) index.js:278
next index.js:166
page.dispatch index.js:169
page.replace index.js:148
page.start index.js:103
page index.js:60
(anonymous function) router_client.js:176
ready
所以我不明白为什么这不起作用。“类型”和“名称”的 console.log 显示正确的值,所以我认为 Activity.findOne() 应该按预期工作。但它没有。上面错误日志中的这一行:
Uncaught TypeError: Cannot read property '_id' of undefined client.js:34
对应于我的 client.js 中的这行代码:
Session.set("currentActivity", activity._id);
这告诉我 findOne 没有找到结果并且var 活动未定义。为什么单击链接时路由会起作用,但在浏览器地址栏中手动输入 URL 时却不起作用?
谢谢!