handle errors in client

This commit is contained in:
Rich Harris
2018-07-16 14:57:49 -04:00
parent af0bd1580d
commit 61e3b6c6a0
2 changed files with 23 additions and 7 deletions

View File

@@ -59,6 +59,7 @@ function generate_client(
let code = `
// This file is generated by Sapper — do not edit it!
import root from '${posixify(`${path_to_routes}/index.html`)}';
import error from '${posixify(`${path_to_routes}/_error.html`)}';
${routes.components.map(component =>
`const ${right_pad(component.name, len)} = () => import('${posixify(`${path_to_routes}/${component.file}`)}');`)
@@ -67,8 +68,6 @@ function generate_client(
export const routes = {
ignore: [${server_routes_to_ignore.map(route => route.pattern).join(', ')}],
root,
pages: [
${routes.pages.map(page => `{
// ${page.parts[page.parts.length - 1].component.file}
@@ -86,7 +85,9 @@ function generate_client(
}`).join(',\n\n\t\t\t\t')}
],
error: () => import(/* webpackChunkName: '_error' */ '${posixify(`${path_to_routes}/_error.html`)}')
root,
error
};`.replace(/^\t\t/gm, '').trim();
if (dev()) {

View File

@@ -123,10 +123,6 @@ function prepare_page(target: Target): Promise<{
error = { statusCode: 500, message: err };
return [];
}).then(results => {
if (error) {
console.error('TODO', error);
}
if (redirect) {
return { redirect };
}
@@ -134,6 +130,25 @@ function prepare_page(target: Target): Promise<{
const get_params = page.parts[page.parts.length - 1].params || (() => ({}));
const params = get_params(target.match);
if (error) {
const props = {
path,
query,
params,
error: typeof error.message === 'string' ? new Error(error.message) : error.message,
status: error.statusCode
};
return {
data: Object.assign({}, props, {
child: {
component: routes.error,
props
}
})
};
}
// TODO skip unchanged segments
const props = { path, query };
const data = { path, query, params, child: {} };