mirror of
https://github.com/kevin-DL/sapper.git
synced 2026-01-19 05:45:27 +00:00
handle errors in client
This commit is contained in:
@@ -59,6 +59,7 @@ function generate_client(
|
|||||||
let code = `
|
let code = `
|
||||||
// This file is generated by Sapper — do not edit it!
|
// This file is generated by Sapper — do not edit it!
|
||||||
import root from '${posixify(`${path_to_routes}/index.html`)}';
|
import root from '${posixify(`${path_to_routes}/index.html`)}';
|
||||||
|
import error from '${posixify(`${path_to_routes}/_error.html`)}';
|
||||||
|
|
||||||
${routes.components.map(component =>
|
${routes.components.map(component =>
|
||||||
`const ${right_pad(component.name, len)} = () => import('${posixify(`${path_to_routes}/${component.file}`)}');`)
|
`const ${right_pad(component.name, len)} = () => import('${posixify(`${path_to_routes}/${component.file}`)}');`)
|
||||||
@@ -67,8 +68,6 @@ function generate_client(
|
|||||||
export const routes = {
|
export const routes = {
|
||||||
ignore: [${server_routes_to_ignore.map(route => route.pattern).join(', ')}],
|
ignore: [${server_routes_to_ignore.map(route => route.pattern).join(', ')}],
|
||||||
|
|
||||||
root,
|
|
||||||
|
|
||||||
pages: [
|
pages: [
|
||||||
${routes.pages.map(page => `{
|
${routes.pages.map(page => `{
|
||||||
// ${page.parts[page.parts.length - 1].component.file}
|
// ${page.parts[page.parts.length - 1].component.file}
|
||||||
@@ -86,7 +85,9 @@ function generate_client(
|
|||||||
}`).join(',\n\n\t\t\t\t')}
|
}`).join(',\n\n\t\t\t\t')}
|
||||||
],
|
],
|
||||||
|
|
||||||
error: () => import(/* webpackChunkName: '_error' */ '${posixify(`${path_to_routes}/_error.html`)}')
|
root,
|
||||||
|
|
||||||
|
error
|
||||||
};`.replace(/^\t\t/gm, '').trim();
|
};`.replace(/^\t\t/gm, '').trim();
|
||||||
|
|
||||||
if (dev()) {
|
if (dev()) {
|
||||||
|
|||||||
@@ -123,10 +123,6 @@ function prepare_page(target: Target): Promise<{
|
|||||||
error = { statusCode: 500, message: err };
|
error = { statusCode: 500, message: err };
|
||||||
return [];
|
return [];
|
||||||
}).then(results => {
|
}).then(results => {
|
||||||
if (error) {
|
|
||||||
console.error('TODO', error);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (redirect) {
|
if (redirect) {
|
||||||
return { redirect };
|
return { redirect };
|
||||||
}
|
}
|
||||||
@@ -134,6 +130,25 @@ function prepare_page(target: Target): Promise<{
|
|||||||
const get_params = page.parts[page.parts.length - 1].params || (() => ({}));
|
const get_params = page.parts[page.parts.length - 1].params || (() => ({}));
|
||||||
const params = get_params(target.match);
|
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
|
// TODO skip unchanged segments
|
||||||
const props = { path, query };
|
const props = { path, query };
|
||||||
const data = { path, query, params, child: {} };
|
const data = { path, query, params, child: {} };
|
||||||
|
|||||||
Reference in New Issue
Block a user