Migrated to prerender node-module
This commit is contained in:
parent
dbfbba1067
commit
79bdc18934
7 changed files with 278 additions and 5 deletions
|
|
@ -10,3 +10,4 @@ import './facts';
|
|||
import '../common/comments';
|
||||
import './sitemaps';
|
||||
import './subsUnion';
|
||||
import './prerender';
|
||||
|
|
|
|||
46
imports/startup/server/prerender.js
Normal file
46
imports/startup/server/prerender.js
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
/* global WebApp */
|
||||
|
||||
import { Meteor } from 'meteor/meteor';
|
||||
import prerenderIO from 'prerender-node';
|
||||
|
||||
// NOTE: Fetch as Google needs the /?_escaped_fragment_=
|
||||
// https://webmasters.stackexchange.com/questions/72819/fetch-as-google-doesnt-find-the-html-snapshot-for-my-ajax-content
|
||||
|
||||
// https://forums.meteor.com/t/any-guide-for-prerender-node-and-your-own-server-on-meteor/22054/9
|
||||
const settings = Meteor.settings.PrerenderIO;
|
||||
|
||||
// https://github.com/dferber90/meteor-prerender/blob/master/server/prerender.js
|
||||
const token = process.env.PRERENDERIO_TOKEN || (settings && settings.token);
|
||||
const protocol = process.env.PRERENDERIO_PROTOCOL || (settings && settings.protocol);
|
||||
// service url (support `prerenderServiceUrl` (for historical reasons) and `serviceUrl`)
|
||||
let serviceUrl = settings && (settings.prerenderServiceUrl || settings.serviceUrl);
|
||||
serviceUrl = process.env.PRERENDERIO_SERVICE_URL || serviceUrl;
|
||||
|
||||
Meteor.startup(() => {
|
||||
/* TODO if (!__meteor_runtime_config__.ROOT_URL.match(/www|stg|app/)) return; */
|
||||
|
||||
prerenderIO.set('prerenderToken', token);
|
||||
|
||||
if (serviceUrl) prerenderIO.set('prerenderServiceUrl', serviceUrl);
|
||||
prerenderIO.set('prerenderToken', token);
|
||||
if (protocol) prerenderIO.set('protocol', protocol);
|
||||
|
||||
prerenderIO.set('beforeRender', (req, done) => {
|
||||
if (Meteor.isDevelopment) console.log('\nprerender before', req.headers, '\n\n');
|
||||
/* This method is intended to be used for caching, but could be used to save analytics or anything else you need to do for each crawler request. If you return a string from beforeRender, the middleware will serve that to the crawler (with status 200) instead of making a request to the prerender service. If you return an object the middleware will look for a status and body property (defaulting to 200 and "" respectively) and serve those instead. */
|
||||
done();
|
||||
});
|
||||
|
||||
prerenderIO.set('afterRender', (err, req, prerender_res) => {
|
||||
/* This method is intended to be used for caching, but could be used to save analytics or anything else you need to do for each crawler request. This method is a noop and is called after the prerender service returns HTML. */
|
||||
if (err) {
|
||||
console.log('prerenderio error', err);
|
||||
return;
|
||||
}
|
||||
if (Meteor.isDevelopment) console.log('prerender after', req.url, '\nheaders:', req.headers, '\nres complete:', prerender_res.complete, prerender_res.statusCode, prerender_res.statusMessage, '\nres headers:', prerender_res.headers, '\nres body', prerender_res);
|
||||
});
|
||||
|
||||
WebApp.rawConnectHandlers.use(prerenderIO);
|
||||
|
||||
console.log('\nprerender service:', settings);
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue