Meteor获取Prerender.io工作

时间:2018-02-25 01:11:46

标签: javascript meteor meteor-blaze prerender

我正在尝试让本地和prod工作的prerender。我觉得我已经尝试过所有的实现。在使用时,我仍然没有在身体中获得静态html:?_escaped_fragment_ =在URL的末尾。

这是我目前的Meteor实施:



Meteor.startup(() => {
  var prerenderio = Npm.require('prerender-node');
  var token;
  var serviceUrl;
  var protocol;
  var settings = Meteor.settings.PrerenderIO;


  token = process.env.PRERENDERIO_TOKEN || (settings && settings.token);
  protocol = process.env.PRERENDERIO_PROTOCOL || (settings && settings.protocol);

  // service url (support `prerenderServiceUrl` (for historical reasons) and `serviceUrl`)
  serviceUrl = settings && (settings.prerenderServiceUrl || settings.serviceUrl);
  serviceUrl = process.env.PRERENDERIO_SERVICE_URL || serviceUrl;


  if (token) {
    if (serviceUrl) prerenderio.set('prerenderServiceUrl', serviceUrl);
    prerenderio.set('prerenderToken', token);
    if (protocol) prerenderio.set('protocol', protocol);

    prerenderio.set('afterRender', function afterRender(error) {
      if (error) {
        console.log('prerenderio error', error); // eslint-disable-line no-console
        return;
      }
    });

    WebApp.rawConnectHandlers.use(prerenderio);
  }
});




我的设置文件设置如下:



"PrerenderIO": {
  "serviceUrl": "http://localhost:3033/",
  "token": "mytoken"
},




与prod相同,但没有serviceUrl。我确实得到了prerender服务器和页面呈现....但它仍然是默认的Meteor脚本呈现页面。我还尝试了<script> window.prerenderReady = false; </script>,然后在通过我们的路由器加载API内容后将其设置为true(使用ButterCMS作为网站内容。

我当然还在我们的网站上添加了<meta name="fragment" content="!">

Prerender仍在说它没有看到我们的令牌被使用。我想我可能会遗漏一些明显的东西......但不确定它是什么。

1 个答案:

答案 0 :(得分:2)

这似乎是预渲染中间件没有运行。 Meteor是否按照添加的顺序离开rawConnectHandlers?你能试试这个:

<style>

看看你的日志中是否有任何输出显示传入的URL是什么样的。如果您正在访问WebApp.rawConnectHandlers.use(function(req, res, next) { console.log('before prerender:', req.url) }); WebApp.rawConnectHandlers.use(prerenderio); URL,您应该看到在该console.log语句中打印。

如果您希望我们帮助测试,请随时发送电子邮件至support@prerender.io与我们联系。