Meteor(Iron Router 订阅):使用 waitOn 处理服务器错误
Meteor (Iron Router subscriptions): handling server errors with waitOn
如果我的用户偶然发现没有数据库匹配的页面,我会尝试将他们重定向到 404 页面(甚至首页)。
我的 waitOn 代码(在 Iron Router 路由内)
waitOn: function(){
return Meteor.subscribe('cars', this.params.slug);
},
我的发布方式:
Meteor.publish("cars", function (slug) {
var selectedCar = Cars.findOne({slug: slug})._id;
return [
Cars.find({ _id: selectedCar}),
Parts.find({carid: selectedCar}),
]
});
一切都很好,除了 waitOn 在有人访问没有匹配 Car 的页面时挂起(即 :slug 与数据库中的任何内容都不匹配)
示例服务器错误:
Exception from sub cars id CTusRZSAPqJaK9ws3 TypeError: Cannot read
property '_id' of undefined
我已经尝试了各种 blogs/posts 上推荐的各种方法,但仍然不确定在涉及 waitOn 时如何处理此类服务器错误。
有没有人能够处理订阅中的此类错误?
在您当前的代码中,您没有处理 findOne 方法可能 return 未定义的情况。
请修改您的发布:
Meteor.publish("cars", function (slug) {
var selectedCar = Cars.findOne({slug: slug});
if (selectedCar) {
return [
Cars.find({ _id: selectedCar._id}),
Parts.find({carid: selectedCar._id}),
]
}
this.ready()
});
在上面的代码中,如果 findOne return 是 undefined
结果,我们将调用 this.ready()
方法来设置订阅.
在客户端,如果您没有收到订阅中的任何数据,您可以显示 404 消息(未找到项目)。
您还应该在查询之前验证 slug。只是为了避免任何 nosql
注入。为此,您可以使用 check
包。
如果我的用户偶然发现没有数据库匹配的页面,我会尝试将他们重定向到 404 页面(甚至首页)。
我的 waitOn 代码(在 Iron Router 路由内)
waitOn: function(){
return Meteor.subscribe('cars', this.params.slug);
},
我的发布方式:
Meteor.publish("cars", function (slug) {
var selectedCar = Cars.findOne({slug: slug})._id;
return [
Cars.find({ _id: selectedCar}),
Parts.find({carid: selectedCar}),
]
});
一切都很好,除了 waitOn 在有人访问没有匹配 Car 的页面时挂起(即 :slug 与数据库中的任何内容都不匹配)
示例服务器错误:
Exception from sub cars id CTusRZSAPqJaK9ws3 TypeError: Cannot read property '_id' of undefined
我已经尝试了各种 blogs/posts 上推荐的各种方法,但仍然不确定在涉及 waitOn 时如何处理此类服务器错误。
有没有人能够处理订阅中的此类错误?
在您当前的代码中,您没有处理 findOne 方法可能 return 未定义的情况。
请修改您的发布:
Meteor.publish("cars", function (slug) {
var selectedCar = Cars.findOne({slug: slug});
if (selectedCar) {
return [
Cars.find({ _id: selectedCar._id}),
Parts.find({carid: selectedCar._id}),
]
}
this.ready()
});
在上面的代码中,如果 findOne return 是 undefined
结果,我们将调用 this.ready()
方法来设置订阅.
在客户端,如果您没有收到订阅中的任何数据,您可以显示 404 消息(未找到项目)。
您还应该在查询之前验证 slug。只是为了避免任何 nosql
注入。为此,您可以使用 check
包。