Files
RSSHub/lib/middleware/header.js
Daniel Li (李丹阳) d77a039f05 style(eslint): add no-implicit-coercion rule (#8175)
* refactor: add no-implicit-coercion rule for ESLint

* fix: errors from deepscan

* fix: errors from deepscan

* fix: errors from deepscan

* fix: errors from deepscan

* fix: errors from deepscan

* Update docs/en/joinus/quick-start.md

Co-authored-by: Sukka <isukkaw@gmail.com>

* Update docs/joinus/quick-start.md

Co-authored-by: Sukka <isukkaw@gmail.com>

* Update lib/routes/av01/tag.js

Co-authored-by: Sukka <isukkaw@gmail.com>

* Update lib/routes/gov/taiwan/mnd.js

Co-authored-by: Sukka <isukkaw@gmail.com>

* Update lib/routes/ps/product.js

Co-authored-by: Sukka <isukkaw@gmail.com>

* refactor: minify html string

Co-authored-by: Sukka <isukkaw@gmail.com>
2021-09-15 21:22:11 +08:00

46 lines
1.2 KiB
JavaScript

const etagCalculate = require('etag');
const logger = require('@/utils/logger');
const config = require('@/config').value;
const headers = {
'Access-Control-Allow-Methods': 'GET',
'Content-Type': 'application/xml; charset=utf-8',
'Cache-Control': `public, max-age=${config.cache.routeExpire}`,
'X-Content-Type-Options': 'nosniff',
};
if (config.nodeName) {
headers['RSSHub-Node'] = config.nodeName;
}
module.exports = async (ctx, next) => {
logger.info(`${ctx.url}, user IP: ${ctx.ips[0] || ctx.ip}`);
ctx.set(headers);
ctx.set({
'Access-Control-Allow-Origin': config.allowOrigin || ctx.host,
});
await next();
if (!ctx.body || typeof ctx.body !== 'string' || ctx.response.get('ETag')) {
return;
}
const status = (ctx.status / 100) | 0;
if (2 !== status) {
return;
}
ctx.set('ETag', etagCalculate(ctx.body.replace(/<lastBuildDate>(.*)<\/lastBuildDate>/, '').replace(/<atom:link(.*)\/>/, '')));
if (ctx.fresh) {
ctx.status = 304;
ctx.body = null;
} else {
const match = ctx.body.match(/<lastBuildDate>(.*)<\/lastBuildDate>/);
if (match) {
ctx.set({
'Last-Modified': match[1],
});
}
}
};