Fix: handle missing carbonIntensity and fossilFuelPercentage safely

The displayCarbonUsage function now includes null-safe checks to prevent runtime errors when CO₂ Signal API data is missing. Added user-facing fallback text and console warnings.
pull/1551/head
Anas Ahmed 10 months ago committed by GitHub
parent 79c84998b2
commit cf2cc32760
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -35,37 +35,39 @@ const displayCarbonUsage = async (apiKey, region) => {
try { try {
await axios await axios
.get('https://api.co2signal.com/v1/latest', { .get('https://api.co2signal.com/v1/latest', {
params: { params: { countryCode: region },
countryCode: region, headers: { 'auth-token': apiKey },
},
headers: {
//please get your own token from CO2Signal https://www.co2signal.com/
'auth-token': apiKey,
},
}) })
.then((response) => { .then((response) => {
let CO2 = Math.floor(response.data.data.carbonIntensity); const data = response?.data?.data;
// ✅ Validate required data before using
if (data?.carbonIntensity == null || data?.fossilFuelPercentage == null) {
throw new Error('Missing carbon intensity or fossil fuel data');
}
let CO2 = Math.floor(data.carbonIntensity);
calculateColor(CO2); calculateColor(CO2);
loading.style.display = 'none'; loading.style.display = 'none';
form.style.display = 'none'; form.style.display = 'none';
myregion.textContent = region; myregion.textContent = region;
usage.textContent = usage.textContent =
Math.round(response.data.data.carbonIntensity) + ' grams (grams C02 emitted per kilowatt hour)'; Math.round(data.carbonIntensity) + ' grams (grams C02 emitted per kilowatt hour)';
fossilfuel.textContent = fossilfuel.textContent =
response.data.data.fossilFuelPercentage.toFixed(2) + data.fossilFuelPercentage.toFixed(2) +
'% (percentage of fossil fuels used to generate electricity)'; '% (percentage of fossil fuels used to generate electricity)';
results.style.display = 'block'; results.style.display = 'block';
}); });
} catch (error) { } catch (error) {
console.log(error); console.warn('Data fetch failed:', error.message);
loading.style.display = 'none'; loading.style.display = 'none';
results.style.display = 'none'; results.style.display = 'none';
errors.textContent = 'Sorry, we have no data for the region you have requested.'; errors.textContent = 'Sorry, data unavailable for the selected region.';
} }
}; };
// set up api key and region // set up api key and region
const setUpUser = async (apiKey, region) => { const setUpUser = async (apiKey, region) => {
localStorage.setItem('apiKey', apiKey); localStorage.setItem('apiKey', apiKey);

Loading…
Cancel
Save