javascript - Meteor 让 Prerender.io 正常工作

标签 javascript meteor meteor-blaze prerender

我正在尝试让预渲染在本地和产品上工作。我觉得我已经尝试了所有的实现。在 URL 末尾使用 ?_escaped_fragment_= 时,正文中仍然没有静态 html。

这是我当前的 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。我确实启动了预渲染服务器并渲染了页面......但它仍然是默认的 Meteor 脚本渲染页面。我也尝试过:<script> window.prerenderReady = false; </script>然后在我的 API 内容通过路由器加载后将其设置为 true(使用 ButterCMS 作为网站内容。

我当然还添加了:<meta name="fragment" content="!">到我们的网站头。

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

最佳答案

这似乎预渲染中间件没有运行。 Meteor 是否按照添加 rawConnectHandler 的顺序保留它们?你能试试这个吗:

WebApp.rawConnectHandlers.use(function(req, res, next) {
    console.log('before prerender:', req.url)
});
WebApp.rawConnectHandlers.use(prerenderio);

并查看您是否在日志中看到任何显示传入 URL 的输出。如果您正在访问 ?_escaped_fragment_= URL,您应该会看到在该 console.log 语句中打印出来。

如果您希望我们帮助测试,请随时向我们发送电子邮件至 support@prerender.io,并提供 URL。

关于javascript - Meteor 让 Prerender.io 正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48969282/

相关文章:

javascript - Meteor - 在路由中的 React 模板中使用 Blaze 模板

javascript - 如何对已渲染的集合进行排序?就像 AngularJS 的 orderBy 指令一样

javascript - 在 Meteor 的 Collection 中定义值数组

javascript - 在 Meteor 中使用自动表单将 postId 添加到评论中

Internet Explorer 中的 JavaScript 菜单下拉问题

javascript 复选框取消选中不起作用

javascript - HTTP Request JS - 如何从列表中提取数字,将它们保存到变量中并使用它们进行进一步处理?

javascript - Meteor - 在一段时间内(按日期)解锁模板

javascript - 当所选文本位于 iframe 中时,content.getSelection() 不起作用?

javascript - 在页面上将两个元素 - 图表 - 放在彼此的下方