44 lines
1.1 KiB
JavaScript
44 lines
1.1 KiB
JavaScript
// pass through api requests
|
|
|
|
// http(s) modules
|
|
const https = require('https');
|
|
|
|
// url parsing
|
|
const queryString = require('querystring');
|
|
|
|
// return an express router
|
|
module.exports = (req, res) => {
|
|
// add out-going headers
|
|
const headers = {};
|
|
headers['user-agent'] = '(WeatherStar 4000+, ws4000@netbymatt.com)';
|
|
headers.accept = req.headers.accept;
|
|
|
|
// get query paramaters if the exist
|
|
const queryParams = Object.keys(req.query).reduce((acc, key) => {
|
|
// skip the paramater 'u'
|
|
if (key === 'u') return acc;
|
|
// add the paramter to the resulting object
|
|
acc[key] = req.query[key];
|
|
return acc;
|
|
}, {});
|
|
let query = queryString.encode(queryParams);
|
|
if (query.length > 0) query = `?${query}`;
|
|
|
|
// get the page
|
|
https.get(`https://api.weather.gov${req.path}${query}`, {
|
|
headers,
|
|
}, (getRes) => {
|
|
// pull some info
|
|
const { statusCode } = getRes;
|
|
// pass the status code through
|
|
res.status(statusCode);
|
|
|
|
// set headers
|
|
res.header('content-type', getRes.headers['content-type']);
|
|
// pipe to response
|
|
getRes.pipe(res);
|
|
}).on('error', (e) => {
|
|
console.error(e);
|
|
});
|
|
};
|