Skip to content

Commit c02e003

Browse files
Update addon/services/docs-store.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 2c092c2 commit c02e003

1 file changed

Lines changed: 40 additions & 8 deletions

File tree

addon/services/docs-store.js

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,20 +78,52 @@ export default class DocsStoreService extends Service {
7878
let url = `${protocol}://${host}/docs/${id}.json`;
7979

8080
let data = await new Promise((resolve, reject) => {
81-
http
82-
.get(url, (res) => {
83-
let body = '';
84-
res.on('data', (chunk) => (body += chunk));
85-
res.on('end', () => resolve(body));
86-
})
87-
.on('error', reject);
81+
let req = http.get(url, (res) => {
82+
res.setEncoding('utf8');
83+
let body = '';
84+
res.on('data', (chunk) => {
85+
body += chunk;
86+
});
87+
res.on('end', () => {
88+
let statusCode = res.statusCode || 0;
89+
if (statusCode >= 200 && statusCode < 300) {
90+
resolve(body);
91+
} else {
92+
reject(
93+
new Error(
94+
`Request to ${url} failed with status ${statusCode}`
95+
)
96+
);
97+
}
98+
});
99+
res.on('error', reject);
100+
});
101+
102+
req.on('error', reject);
103+
// Basic timeout so prember/fastboot failures don't hang indefinitely
104+
req.setTimeout(10000, () => {
105+
req.abort();
106+
reject(new Error(`Request to ${url} timed out`));
107+
});
88108
});
89109

90110
payload = JSON.parse(data);
91111
} else {
92112
let namespace = `${getRootURL(this).replace(/\/$/, '')}/docs`;
93113
let url = `${namespace}/${id}.json`;
94-
let response = await fetch(url);
114+
let response;
115+
try {
116+
response = await fetch(url);
117+
} catch (e) {
118+
throw new Error(
119+
`Network error while fetching ${url}: ${e && e.message}`
120+
);
121+
}
122+
if (!response.ok) {
123+
throw new Error(
124+
`Request to ${url} failed with status ${response.status}`
125+
);
126+
}
95127
payload = await response.json();
96128
}
97129

0 commit comments

Comments
 (0)