I want to render 500 error's traceback came from server only for admin, so:
- In
server.js, session is populated with user retrieved from http_only cookie, just something like{'username': 'admin'}
polka()
.use(
sapper.middleware({
session: (req, res) => {
return { 'user': parseCookie('user') }
}
})
)
.listen(PORT);
- In some
index.jsthere is a global variable to store possible traceback of 500 error came from server:
import { writable } from 'svelte/store';
export const error = writable();
- In
index.htmlarticle is preloaded, and in case of 500 error, traceback is rendered below if current user is admin:
<script context="module">
import { error } from 'index.js';
export async function preload(page, session) {
return { article : await this.fetch('/api/article/').then(response => {
if (response.status == 500 && session.user.username === 'admin') {
error.set(response);
}
return response.json();
})}
}
</script>
<script>
export let article
</script>
<h1>{ article.title }</h1>
<div>{ article.text }</div>
<!-- 500 ERROR TRACEBACK --->
{#if $error}
{@html $error}
{/if}
So, if $error is set via preload function, will it be safe and rendered only server-side?
If not, how can it be improved?
Maybe if (process.browser) could help somehow?
Thx