diff --git a/src/response-handler.js b/src/response-handler.js index ce70ccf..f381ca2 100644 --- a/src/response-handler.js +++ b/src/response-handler.js @@ -6,25 +6,32 @@ class ResponseHandler { return (response) => { if (debug) { console.log(response); } // eslint-disable-line no-console - let result = ''; let isJson = response.headers['content-type'] == 'text/json'; let isTiff = response.headers['content-type'] == 'image/tiff'; let isPdf = response.headers['content-type'] == 'application/pdf'; let isImage = isTiff || isPdf; + let result = isImage ? [] : ''; let isLocation = response.headers['location'] !== undefined; response.on('data', function(chunk) { - result += chunk; + if (isImage) { + result.push(chunk); + } else { + result += chunk; + } }); response.on('end', function() { if (debug) { console.log(result); } // eslint-disable-line no-console if (isLocation) { result = new Location(response.headers['location']); } - else if (isImage) { result = new Image(result, response.headers['content-type']); } else if (isJson && result.length > 0) { result = JSON.parse(result); } else if (isJson && result.length == 0) { result = null; } + else if (isImage) { + const data = Buffer.concat(result); + result = new Image(data, response.headers['content-type']); + } if (response.statusCode >= 300) { emitter.emit('reject', result); diff --git a/tests/fixtures/pdf-sample.pdf b/tests/fixtures/pdf-sample.pdf new file mode 100644 index 0000000..f698ff5 Binary files /dev/null and b/tests/fixtures/pdf-sample.pdf differ diff --git a/tests/response-handler.js b/tests/response-handler.js index 1f571fc..eac1fbe 100644 --- a/tests/response-handler.js +++ b/tests/response-handler.js @@ -1,6 +1,7 @@ import ResponseHandler from '../src/response-handler.js'; import Image from '../src/image.js'; import EventEmitter from 'events'; +import fs from 'fs'; import { expect } from 'chai'; @@ -52,9 +53,10 @@ describe('ResponseHandler', () => { }); it('should process an image response', (done) => { + let pdfData = fs.readFileSync('tests/fixtures/pdf-sample.pdf'); let emitter = new EventEmitter(); emitter.on('resolve', (result) => { - expect(result).to.eql({ 'data': 'Hello World!', 'contentType' : 'application/pdf', 'extension' : 'pdf' }); + expect(result.data).to.eql(pdfData); expect(result).to.be.instanceof(Image); done(); }); @@ -65,7 +67,7 @@ describe('ResponseHandler', () => { handler(response); - response.emit('data', 'Hello World!'); + response.emit('data', pdfData); response.emit('end'); });