Browse Source

Drop expired for http-cache-semantics

extract-response
Luke Childs 8 years ago
parent
commit
0f6f944b9e
  1. 25
      index.js
  2. 2
      package.json

25
index.js

@ -16,7 +16,7 @@ const unzipResponse = require('unzip-response');
const createErrorClass = require('create-error-class'); const createErrorClass = require('create-error-class');
const isRetryAllowed = require('is-retry-allowed'); const isRetryAllowed = require('is-retry-allowed');
const Buffer = require('safe-buffer').Buffer; const Buffer = require('safe-buffer').Buffer;
const expired = require('expired'); const CachePolicy = require('http-cache-semantics');
const normalizeUrl = require('normalize-url'); const normalizeUrl = require('normalize-url');
const Response = require('responselike'); const Response = require('responselike');
const pkg = require('./package'); const pkg = require('./package');
@ -61,7 +61,8 @@ function requestAsEventEmitter(opts) {
response.url = redirectUrl || requestUrl; response.url = redirectUrl || requestUrl;
response.requestUrl = requestUrl; response.requestUrl = requestUrl;
if (opts.cache && statusCode === 200 && req.method === 'GET' && (expired(response.headers) === false || 'etag' in response.headers)) { const policy = new CachePolicy(opts, response);
if (opts.cache && policy.storable()) {
const encoding = opts.encoding === null ? 'buffer' : opts.encoding; const encoding = opts.encoding === null ? 'buffer' : opts.encoding;
const stream = getStream(response, {encoding}); const stream = getStream(response, {encoding});
@ -69,8 +70,11 @@ function requestAsEventEmitter(opts) {
.then(data => { .then(data => {
const key = normalizeUrl(response.url); const key = normalizeUrl(response.url);
const value = JSON.stringify({ const value = JSON.stringify({
headers: response.headers, policy: policy.toObject(),
body: data response: {
headers: response.headers,
body: data
}
}); });
opts.cache.put(key, value); opts.cache.put(key, value);
}); });
@ -100,17 +104,20 @@ function requestAsEventEmitter(opts) {
}); });
}; };
if (opts.cache && opts.method === 'GET') { if (opts.cache) {
const key = normalizeUrl(requestUrl); const key = normalizeUrl(requestUrl);
opts.cache.get(key, (err, value) => { opts.cache.get(key, (err, value) => {
if (err) { if (err) {
return get(opts); return get(opts);
} }
const cachedResponse = JSON.parse(value); const cachedValue = JSON.parse(value);
if (expired(cachedResponse.headers) === false) { const policy = CachePolicy.fromObject(cachedValue.policy);
const response = responseFromCache(requestUrl, cachedResponse); if (!policy.satisfiesWithoutRevalidation(opts)) {
ee.emit('response', response); return get(opts);
} }
cachedValue.response.headers = policy.responseHeaders();
const response = responseFromCache(requestUrl, cachedValue.response);
ee.emit('response', response);
}); });
} else { } else {
get(opts); get(opts);

2
package.json

@ -44,8 +44,8 @@
"dependencies": { "dependencies": {
"create-error-class": "^3.0.0", "create-error-class": "^3.0.0",
"duplexer3": "^0.1.4", "duplexer3": "^0.1.4",
"expired": "^1.3.8",
"get-stream": "^3.0.0", "get-stream": "^3.0.0",
"http-cache-semantics": "^3.7.3",
"is-redirect": "^1.0.0", "is-redirect": "^1.0.0",
"is-retry-allowed": "^1.0.0", "is-retry-allowed": "^1.0.0",
"is-stream": "^1.0.0", "is-stream": "^1.0.0",

Loading…
Cancel
Save