UKHSA-Internal / coronavirus-dashboard-api-javascript-sdk

Coronavirus (COVID-19) in the UK - API Service SDK for JavaScript
MIT License
16 stars 7 forks source link

getJSON() call fails with 'unexpected end of file' error #4

Open jschuur opened 3 years ago

jschuur commented 3 years ago

While attempting to use this in Node (14.13.1 FWIW), I get the following error...

(node:92897) UnhandledPromiseRejectionWarning: Error: unexpected end of file
    at Zlib.zlibOnError [as onerror] (zlib.js:180:17)

...with the following code:

const Cov19API = require('@publichealthengland/uk-covid19').default;

(async () => {
  const casesAndDeaths = {
    date: 'date',
    areaName: 'areaName',
    areaCode: 'areaCode',
    newDeaths28DaysByDeathDate: 'newDeaths28DaysByDeathDate',
  };

  const englandOnly = ['areaType=nation', 'areaName=England'];

  const api = new Cov19API({
    filters: englandOnly,
    structure: casesAndDeaths,
  });

  const data = await api.getJSON();
  console.log(data);
})();

I've added .default per #1 and updated the metrics per #3 in this code already. I did add an await before api.getJSON(), since that returns a promise.

As best as I can tell from debugging this, the error seems to come from the axios call in this.head(), triggered at the end of getJSON, when the API returns status code 204. Wasn't able to solve the problem though.

As a workaround, calling getCSV doesn't have this problem (because it doesn't make a HEAD request).

jschuur commented 3 years ago

This seems to be lead:

axios.head called on a .gz file throws an exception, presumably due to attempting to deflate a non-existent response body.

Not sure why it thinks the response is compressed though.