seo-crawler
Version:
Simple node.js SEO content crawler for SPAs with cache
41 lines (33 loc) • 1.02 kB
JavaScript
const jobs = require('./utils/jobs');
const cache = require('./utils/cache');
const crawler = require('./utils/crawler');
const seoCrawler = options => async (req, res) => {
const { jobTitle, renderHTML, crawlerList } = options;
const siteUrl =
options.siteUrl ||
process.env.SITE_URL ||
req.headers && req.headers.host;
const isCrawler = crawler.isCrawler({
headers: req.headers,
customCrawlers: crawlerList
});
if (!isCrawler) {
const cachedContent = await cache.get(req, jobTitle);
if (cachedContent.reply) {
return res.send(cachedContent.reply);
} else if (cachedContent.newKey) {
cache.set(res, cachedContent.newKey);
const newJob = jobs.create(req, options);
jobs.process({
jobTitle,
siteUrl
});
jobs.handleResults(newJob, res, renderHTML);
return;
} else if (cachedContent.error) {
console.error(cachedContent.error);
}
}
return res.sendFile(renderHTML);
};
module.exports = seoCrawler;