Skip to content

Commit 902cb8d

Browse files
authored
Merge pull request #8 from cto-ai/fix-3
FIX-3: handle bad responses from remote APIs
2 parents cc8582d + 78bba98 commit 902cb8d

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

src/geoipAPI.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,13 @@ function apiRequest(url) {
4646
let coordsResponse = {}
4747

4848
const geoipReq = http.get(url, (res) => {
49-
// console.log(`STATUS: ${res.statusCode}`)
50-
// console.log(`HEADERS: ${JSON.stringify(res.headers)}`)
5149
res.setEncoding('utf8')
5250

51+
if (res.statusCode !== 200) {
52+
console.error(`API request to 'ip-api.com' failed with status code ${res.statusCode}`)
53+
reject(defaultCoords)
54+
}
55+
5356
let responseData = '';
5457
res.on('data', (chunk) => {
5558
// console.log(`BODY: ${JSON.stringify(chunk)}`)

src/weatherAPI.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,10 +176,13 @@ function getWeather(lat, lon, timezone) {
176176
return new Promise((resolve, reject) => {
177177
let weatherResponse = {}
178178
const weatherReq = http.get(url, (res) => {
179-
// console.log(`STATUS: ${res.statusCode}`)
180-
// console.log(`HEADERS: ${JSON.stringify(res.headers)}`)
181179
res.setEncoding('utf8')
182180

181+
182+
if (res.statusCode !== 200) {
183+
reject(new Error(`HTTP ${res.statusCode} ${res.statusMessage}`))
184+
}
185+
183186
let responseData = ''
184187
res.on('data', (chunk) => {
185188
// console.log(`BODY: ${JSON.stringify(chunk)}`)
@@ -189,6 +192,11 @@ function getWeather(lat, lon, timezone) {
189192
res.on('end', () => {
190193
try {
191194
weatherResponse = JSON.parse(responseData)
195+
console.log("Weather API raw response: ", weatherResponse)
196+
197+
// TODO: Throw an error if the `weatherResponse` object
198+
// is missing the expected keys (i.e. `current`, `daily`)
199+
192200
weatherResponse.current.weather = weatherCodes[weatherResponse.current['weather_code']]
193201
weatherResponse.daily.weather = []
194202
weatherResponse.daily.weather_code.forEach(day => {
@@ -209,7 +217,7 @@ function getWeather(lat, lon, timezone) {
209217
})
210218

211219
weatherReq.on('error', (e) => {
212-
console.error(`problem with request: ${e.message}`)
220+
console.error(`Problem retrieving weather: ${e.message}`)
213221
reject(e)
214222
})
215223

0 commit comments

Comments
 (0)