Skip to content

Commit 03cb94c

Browse files
committed
prerender: Reply with the HTTP error status code returned from the API
1 parent a4b445b commit 03cb94c

File tree

3 files changed

+11
-7
lines changed

3 files changed

+11
-7
lines changed

client/src/run-server.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ export default function render(pathname, args='', body, locals={}, cb) {
3131
cb(null, data || {
3232
html: lastHtml
3333
, title: lastState.title
34-
, status: lastState.view == 'notFound' ? 404 : lastState.error ? 400 : 200
34+
, status: lastState.view == 'notFound' ? 404
35+
: lastState.view == 'error' ? lastState.error.status || 400
36+
: 200
3537
})
3638
}
3739

client/src/util.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ export const dropErrors = r$$ => r$$.switchMap(r$ => r$.catch(_ => O.empty()))
112112

113113
export const extractErrors = r$$ =>
114114
r$$.flatMap(r$ => r$.flatMap(_ => O.empty()).catch(err => O.of(err)))
115-
.map(e => e.response && e.status != 502 ? parseError(e.response) : e)
115+
.map(e => e.response ? responseError(e.response) : e)
116116

117117
// Create a stream that ticks every `ms`, but only when the window is focused.
118118
// Returns an empty stream in the server-side pre-renderer environment.
@@ -126,10 +126,12 @@ export const tickWhileFocused = ms =>
126126
export const tickWhileViewing = (ms, view, view$) =>
127127
tickWhileFocused(ms).withLatestFrom(view$).filter(([ _, shown_view ]) => shown_view == view)
128128

129-
const parseError = res =>
130-
(res.body && Object.keys(res.body).length)
131-
? res.body.message || res.body
132-
: res.text
129+
const responseError = res => ({
130+
status: res.status,
131+
message: (res.body && Object.keys(res.body).length)
132+
? res.body.message || res.body
133+
: res.text
134+
})
133135

134136
export const dbg = (obj, label='stream', dbg=debug(label)) =>
135137
Object.keys(obj).forEach(k => obj[k] && obj[k].subscribe(

client/src/views/error.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const formatError = err =>
66
? 'We encountered an error. Please try again later.'
77
: (err.status && err.status === 502)
88
? 'Esplora is currently unavailable, please try again later.'
9-
: err.toString()
9+
: (err.message || err.toString())
1010

1111
export const error = ({ t, error, ...S }) => layout(<div>
1212
<div className="container text-center"><h1>{ t(formatError(error)) }</h1></div>

0 commit comments

Comments
 (0)