Adds the If-Modified-Since header parsing to api/v1/enties/:spec: calls (#3571)

This commit is contained in:
Sulka Haro
2018-05-18 09:01:44 +03:00
committed by GitHub
parent 57beae5f10
commit a354405f81
+37 -1
View File
@@ -83,9 +83,11 @@ function configure (app, wares, ctx) {
res.setHeader('Last-Modified', lastEntryDate.toUTCString());
}
var ifModifiedSince = req.get('If-Modified-Since');
var ifModifiedSince = req.get('If-Modified-Since');
if (!ifModifiedSince) { return next(); }
console.log("CGM Entry request with If-Modified-Since: ", ifModifiedSince);
if (lastEntryDate.getTime() <= new Date(ifModifiedSince).getTime()) {
res.status(304).send({status:304, message: 'Not modified', type:'internal'});
return;
@@ -114,6 +116,40 @@ function configure (app, wares, ctx) {
if (res.entries_err) {
return res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', res.entries_err);
}
// IF-Modified-Since support
function compare(a,b) {
var a_field = a.mills ? a.mills : a.date;
var b_field = b.mills ? b.mills : b.date;
if (a_field < b_field)
return -1;
if (a_field > b_field)
return 1;
return 0;
}
res.entries.sort(compare);
var lastEntry = _.last(res.entries);
var lastEntryDate = null;
if (!_.isNil(lastEntry)) {
if (lastEntry.mills) lastEntryDate = new Date(lastEntry.mills);
if (!lastEntry.mills && lastEntry.date ) lastEntryDate = new Date(lastEntry.date);
res.setHeader('Last-Modified', lastEntryDate.toUTCString());
}
var ifModifiedSince = req.get('If-Modified-Since');
console.log('If-Modified-Since: ' + new Date(ifModifiedSince) + ' Last-Modified', lastEntryDate);
if (lastEntryDate !== null && ifModifiedSince !== null && lastEntryDate.getTime() <= new Date(ifModifiedSince).getTime()) {
res.status(304).send({status:304, message: 'Not modified', type:'internal'});
return;
}
// if no error, format the payload
// The general pattern here is to create an output stream that reformats
// the data correctly into the desired representation.