我正在为我的网址使用Iron Router,我有这条路线:
this.route('regionEdit', {
path: '/region/:_id',
waitOn: function() {
return Meteor.subscribe('region', this.params._id);
},
data: function() {
return Regions.findOne({
_id: this.params._id
});
}
});
当我使用此路径http://example.com/region/xgok3Etc5mfhtmD7j
xgok3Etc5mfhtmD7j
是地区的_id
。但是,当我访问http://example.com/region/whatever
时,页面正常呈现,但没有数据。
如何为此引发404错误?
答案 0 :(得分:8)
不是404,但你可以通过做这样的事情来渲染一个未找到的页面。
this.route('regionEdit', {
path: '/region/:_id',
waitOn: function() {
return Meteor.subscribe('region', this.params._id);
},
data: function() {
var region = Regions.findOne({
_id: this.params._id
});
if(!region)
this.render("notFound");
else
return region;
}
});
答案 1 :(得分:5)
我想你可以尝试Plugins
根据此文档,已存在针对此问题的内置插件
Router.plugin('dataNotFound', {notFoundTemplate: 'notFound'});
它被描述为
如果路线的数据是假的,这个开箱即用的插件会自动呈现名为“notFound”的模板
答案 2 :(得分:0)
在router.js
中Router.configure({
layoutTemplate:'layout',
notFoundTemplate: 'notFound'
});
以这种方式配置路由器以解决问题
和模板部分
<template name="notFound">
<div class="container">
<h1 class="colorWhite">Oopss..ss..ss..</h1>
<p class="colorWhite">You are out of the world, let's go back</p>
</div>
</template>
让它像这样..它应该有效,事实上,它对我有用..
答案 3 :(得分:-1)
我在Router.map
上列出了所有路线:
Router.map(function() {
... // other routes
this.route('404', {
path: '/*',
layoutTemplate: 'application', // this actually lives in Router.configure();
template: 'pageNotFound',
onBeforeAction: function(){
console.log('not found');
}
});
});
<template name="pageNotFound">
<div>
<h2>404 - page not found</h2>
</div>
</template>
<template name="application">
<div>
<h1>My Application</h1>
{{> yield}}
</div>
</template>
如果其他路线都没有获取uri路径,则此pageNotFound
模板会在{{> yeild}}
模板的application
部分中呈现。