目前我们正在使用带有iron:路由器软件包的流星应用程序以及用于通过谷歌抓取此应用程序的spiderable和phantomjs。
在我们的特殊情况下,我们有一些路由,在我们将正确的模板渲染到布局之前,我们称之为运行异步的Meteor方法。
在这些路线上测试spiderable时,模板永远不会被渲染,而我们的“加载”模板将成为渲染模板。
我们正在使用/?_ escaped_fragment _ =
进行测试现在我们正在寻找一种解决方案来告诉Spiderable页面已准备就绪或尚未就绪,因此我们可以控制何时必须呈现页面。
Router.route('/awesome-route', function(){
// This is how it could look to tell spiderable that it has to wait
Spiderable.pleaseWait();
// Render the loading template until our route is ready
this.render('loading');
// Waiting for the response of our method
Meteor.call('data', function(err, resp){
this.render('awesome', {
data : resp
});
// This is how it could look to tell spiderable we are ready / always be polite
Spiderable.thanksForWaiting_WeAreReady();
});
}, {
name : 'awesome'
});
现在打开localhost:3000 / awesome-route?_escaped_fragment_ =我们只会看到这个模板......
对我们来说,另一个选择是:谷歌是否有任何替代方法可以抓取流媒体应用?
答案 0 :(得分:1)
由于spiderable将使用服务器上的phantomjs预呈现模板,因此不需要像spiderablePleaseWaitForALittleBitMore_Please
这样的特殊方法
您可以向iron:router
说明该模板尚未呈现。使用onBeforeAction
hook:
Router.route('/awesome-route', {
name : 'awesome',
template: "awesome",
loadingTemplate: "loading",
onBeforeAction: function(){
var next = this.next;
Meteor.call('data', function(err, resp){
next();
});
}
});