Meteor 开始 Prerender.io 工作
Meteor Getting Prerender.io Working
我正在尝试让预渲染在本地和产品上都能正常工作。我觉得我已经尝试了所有的实现。使用 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"
},
产品相同,但没有 serviceUrl。我确实启动了预呈现服务器并呈现了页面……但它仍然是默认的 Meteor 脚本呈现页面。我还尝试了:<script> window.prerenderReady = false; </script>
,然后在我的 API 内容通过我们的路由器加载后将其设置为 true(使用 ButterCMS 获取站点内容。
我当然还添加了:<meta name="fragment" content="!">
到我们的网站头部。
Prerender 仍然说它没有看到我们的令牌被使用。我想我可能在这里遗漏了一些明显的东西......但不确定它是什么。
预渲染中间件似乎没有 运行。 Meteor 是否按照添加顺序离开 rawConnectHandlers?你能试试这个吗:
WebApp.rawConnectHandlers.use(function(req, res, next) {
console.log('before prerender:', req.url)
});
WebApp.rawConnectHandlers.use(prerenderio);
然后看看您是否在日志中看到任何显示传入 URL 的输出。如果您正在访问 ?_escaped_fragment_=
URL,您应该会在 console.log 语句中看到 get 打印。
如果您希望我们帮助测试,请随时给我们发送电子邮件至 support@prerender.io URL。
我正在尝试让预渲染在本地和产品上都能正常工作。我觉得我已经尝试了所有的实现。使用 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"
},
产品相同,但没有 serviceUrl。我确实启动了预呈现服务器并呈现了页面……但它仍然是默认的 Meteor 脚本呈现页面。我还尝试了:<script> window.prerenderReady = false; </script>
,然后在我的 API 内容通过我们的路由器加载后将其设置为 true(使用 ButterCMS 获取站点内容。
我当然还添加了:<meta name="fragment" content="!">
到我们的网站头部。
Prerender 仍然说它没有看到我们的令牌被使用。我想我可能在这里遗漏了一些明显的东西......但不确定它是什么。
预渲染中间件似乎没有 运行。 Meteor 是否按照添加顺序离开 rawConnectHandlers?你能试试这个吗:
WebApp.rawConnectHandlers.use(function(req, res, next) {
console.log('before prerender:', req.url)
});
WebApp.rawConnectHandlers.use(prerenderio);
然后看看您是否在日志中看到任何显示传入 URL 的输出。如果您正在访问 ?_escaped_fragment_=
URL,您应该会在 console.log 语句中看到 get 打印。
如果您希望我们帮助测试,请随时给我们发送电子邮件至 support@prerender.io URL。