Skip to content

Commit 0343805

Browse files
sdetweilKristjanESPERANTO
authored andcommitted
add error handling to weather fetch functions, including cors
1 parent 034f3c4 commit 0343805

File tree

3 files changed

+33
-19
lines changed

3 files changed

+33
-19
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ planned for 2026-01-01
1515

1616
- [weather] feat: add configurable forecast date format option (#3918)
1717
- [core] Add new `server:watch` script to run MagicMirror² server-only with automatic restarts when files (defined in `config.watchTargets`) change (#3920)
18+
- [weather] add error handling to fetch functions including cors (#3791)
1819

1920
### Changed
2021

js/server_functions.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,28 +41,32 @@ async function cors (req, res) {
4141
url = `invalid url: ${req.url}`;
4242
Log.error(url);
4343
res.send(url);
44-
} else {
45-
url = match[1];
46-
47-
const headersToSend = getHeadersToSend(req.url);
48-
const expectedReceivedHeaders = geExpectedReceivedHeaders(req.url);
44+
return;
45+
}
46+
url = match[1];
4947

50-
Log.log(`cors url: ${url}`);
51-
const response = await fetch(url, { headers: headersToSend });
48+
const headersToSend = getHeadersToSend(req.url);
49+
const expectedReceivedHeaders = geExpectedReceivedHeaders(req.url);
50+
Log.log(`cors url: ${url}`);
5251

52+
const response = await fetch(url, { headers: headersToSend });
53+
if (response.ok) {
5354
for (const header of expectedReceivedHeaders) {
5455
const headerValue = response.headers.get(header);
5556
if (header) res.set(header, headerValue);
5657
}
5758
const data = await response.text();
5859
res.send(data);
60+
} else {
61+
res.status(response.status).json({ message: response.statusText });
5962
}
63+
6064
} catch (error) {
6165
// Only log errors in non-test environments to keep test output clean
6266
if (process.env.mmTestMode !== "true") {
63-
Log.error(error);
67+
Log.error(`Error in CORS request: ${error}`);
6468
}
65-
res.send(error);
69+
res.status(500).json({ error: error.message });
6670
}
6771
}
6872

modules/default/utils.js

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,28 @@ async function performWebRequest (url, type = "json", useCorsProxy = false, requ
1717
requestUrl = url;
1818
request.headers = getHeadersToSend(requestHeaders);
1919
}
20-
const response = await fetch(requestUrl, request);
21-
const data = await response.text();
2220

23-
if (type === "xml") {
24-
return new DOMParser().parseFromString(data, "text/html");
25-
} else {
26-
if (!data || !data.length > 0) return undefined;
21+
try {
22+
const response = await fetch(requestUrl, request);
23+
if (response.ok) {
24+
const data = await response.text();
25+
26+
if (type === "xml") {
27+
return new DOMParser().parseFromString(data, "text/html");
28+
} else {
29+
if (!data || !data.length > 0) return undefined;
2730

28-
const dataResponse = JSON.parse(data);
29-
if (!dataResponse.headers) {
30-
dataResponse.headers = getHeadersFromResponse(expectedResponseHeaders, response);
31+
const dataResponse = JSON.parse(data);
32+
if (!dataResponse.headers) {
33+
dataResponse.headers = getHeadersFromResponse(expectedResponseHeaders, response);
34+
}
35+
return dataResponse;
36+
}
37+
} else {
38+
throw new Error(`Response status: ${response.status}`);
3139
}
32-
return dataResponse;
40+
} catch (error) {
41+
Log.error(`Error fetching data from ${url}: ${error}`);
3342
}
3443
}
3544

0 commit comments

Comments
 (0)