diff --git a/package.json b/package.json index 8a2f175..0a54b47 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "pbf": "3.2.1", "pmtiles": "2.11.0", "proj4": "2.9.2", - "request": "2.88.2", + "axios": "1.5.1", "sanitize-filename": "1.6.3", "sharp": "0.32.6", "tileserver-gl-styles": "2.0.0" diff --git a/src/serve_rendered.js b/src/serve_rendered.js index da92fd6..181e757 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -17,7 +17,7 @@ import mlgl from '@maplibre/maplibre-gl-native'; import MBTiles from '@mapbox/mbtiles'; import polyline from '@mapbox/polyline'; import proj4 from 'proj4'; -import request from 'request'; +import axios from 'axios'; import { getFontsPbf, getTileUrls, @@ -1353,37 +1353,35 @@ export const serve_rendered = { }); } } else if (protocol === 'http' || protocol === 'https') { - request( - { - url: req.url, - encoding: null, - gzip: true, - }, - (err, res, body) => { - const parts = url.parse(req.url); - const extension = path.extname(parts.pathname).toLowerCase(); - const format = extensionToFormat[extension] || ''; - if (err || res.statusCode < 200 || res.statusCode >= 300) { - // console.log('HTTP error', err || res.statusCode); - createEmptyResponse(format, '', callback); - return; - } - - const response = {}; - if (res.headers.modified) { - response.modified = new Date(res.headers.modified); - } - if (res.headers.expires) { - response.expires = new Date(res.headers.expires); - } - if (res.headers.etag) { - response.etag = res.headers.etag; - } - - response.data = body; - callback(null, response); - }, - ); + try { + const response = await axios.get(req.url, { + responseType: 'arraybuffer', // Get the response as raw buffer + // Axios handles gzip by default, so no need for a gzip flag + }); + + const responseHeaders = response.headers; + const responseData = response.data; + + const parsedResponse = {}; + if (responseHeaders['last-modified']) { + parsedResponse.modified = new Date(responseHeaders['last-modified']); + } + if (responseHeaders.expires) { + parsedResponse.expires = new Date(responseHeaders.expires); + } + if (responseHeaders.etag) { + parsedResponse.etag = responseHeaders.etag; + } + + parsedResponse.data = responseData; + callback(null, parsedResponse); + + } catch (error) { + const parts = url.parse(req.url); + const extension = path.extname(parts.pathname).toLowerCase(); + const format = extensionToFormat[extension] || ''; + createEmptyResponse(format, '', callback); + } } }, });