From c409aca08019a40972eaab7899fe4c4519357358 Mon Sep 17 00:00:00 2001 From: John Crepezzi Date: Tue, 6 Oct 2020 22:05:22 -0400 Subject: [PATCH] Add support for HEAD requests On regular document endpoints, and on raw endpoints --- lib/document_handler.js | 34 ++++++++++++++++++++++++++++------ server.js | 20 ++++++++++++++------ 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/lib/document_handler.js b/lib/document_handler.js index 83eb141..14da9b2 100644 --- a/lib/document_handler.js +++ b/lib/document_handler.js @@ -16,33 +16,55 @@ var DocumentHandler = function(options) { DocumentHandler.defaultKeyLength = 10; // Handle retrieving a document -DocumentHandler.prototype.handleGet = function(key, response, skipExpire) { +DocumentHandler.prototype.handleGet = function(request, response, config) { + const key = request.params.id.split('.')[0]; + const skipExpire = !!config.documents[key]; + this.store.get(key, function(ret) { if (ret) { winston.verbose('retrieved document', { key: key }); response.writeHead(200, { 'content-type': 'application/json' }); - response.end(JSON.stringify({ data: ret, key: key })); + if (request.method === 'HEAD') { + response.end(); + } else { + response.end(JSON.stringify({ data: ret, key: key })); + } } else { winston.warn('document not found', { key: key }); response.writeHead(404, { 'content-type': 'application/json' }); - response.end(JSON.stringify({ message: 'Document not found.' })); + if (request.method === 'HEAD') { + response.end(); + } else { + response.end(JSON.stringify({ message: 'Document not found.' })); + } } }, skipExpire); }; // Handle retrieving the raw version of a document -DocumentHandler.prototype.handleRawGet = function(key, response, skipExpire) { +DocumentHandler.prototype.handleRawGet = function(request, response, config) { + const key = request.params.id.split('.')[0]; + const skipExpire = !!config.documents[key]; + this.store.get(key, function(ret) { if (ret) { winston.verbose('retrieved raw document', { key: key }); response.writeHead(200, { 'content-type': 'text/plain; charset=UTF-8' }); - response.end(ret); + if (request.method === 'HEAD') { + response.end(); + } else { + response.end(ret); + } } else { winston.warn('raw document not found', { key: key }); response.writeHead(404, { 'content-type': 'application/json' }); - response.end(JSON.stringify({ message: 'Document not found.' })); + if (request.method === 'HEAD') { + response.end(); + } else { + response.end(JSON.stringify({ message: 'Document not found.' })); + } } }, skipExpire); }; diff --git a/server.js b/server.js index 57bd3da..63f95ea 100644 --- a/server.js +++ b/server.js @@ -109,20 +109,28 @@ if (config.rateLimits) { // first look at API calls app.use(route(function(router) { // get raw documents - support getting with extension + router.get('/raw/:id', function(request, response) { - var key = request.params.id.split('.')[0]; - var skipExpire = !!config.documents[key]; - return documentHandler.handleRawGet(key, response, skipExpire); + return documentHandler.handleRawGet(request, response, config); }); + + router.head('/raw/:id', function(request, response) { + return documentHandler.handleRawGet(request, response, config); + }); + // add documents + router.post('/documents', function(request, response) { return documentHandler.handlePost(request, response); }); + // get documents router.get('/documents/:id', function(request, response) { - var key = request.params.id.split('.')[0]; - var skipExpire = !!config.documents[key]; - return documentHandler.handleGet(key, response, skipExpire); + return documentHandler.handleGet(request, response, config); + }); + + router.head('/documents/:id', function(request, response) { + return documentHandler.handleGet(request, response, config); }); }));