提交 c04bcce5 authored 作者: vipcxj's avatar vipcxj

改善路由错误的捕获,并增加原生错误的处理

上级 babd8810
...@@ -5,6 +5,7 @@ import _ from 'lodash'; ...@@ -5,6 +5,7 @@ import _ from 'lodash';
import config from './utils/config'; import config from './utils/config';
import { isAuthed, hasDomain } from './utils/auth'; import { isAuthed, hasDomain } from './utils/auth';
import { fullPath, makePromise0 } from './utils/helper'; import { fullPath, makePromise0 } from './utils/helper';
import { processError } from './utils/error';
import App from './routes/app'; import App from './routes/app';
import { getMenus, getModuleInfo, getModuleLayout } from './data/modules'; import { getMenus, getModuleInfo, getModuleLayout } from './data/modules';
import Monk from './routes/main/monk'; import Monk from './routes/main/monk';
...@@ -159,7 +160,7 @@ function RouterConfig({ history, app }) { ...@@ -159,7 +160,7 @@ function RouterConfig({ history, app }) {
}, },
]; ];
return ( return (
<Router history={history} routes={routes} /> <Router history={history} routes={routes} onError={processError} />
); );
} }
......
...@@ -13,38 +13,50 @@ const errStyle = { ...@@ -13,38 +13,50 @@ const errStyle = {
}; };
export function processError(err) { export function processError(err) {
if (err && err.data) { if (err) {
const data = err.data; if (err instanceof Error) {
switch (data.errorCode) { showError(err);
case errorCodes.no_such_user: } else if (err.data) {
message.error('用户不存在!'); const data = err.data;
break; switch (data.errorCode) {
case errorCodes.invalid_token: case errorCodes.no_such_user:
push('/login'); message.error('用户不存在!');
break; break;
default: case errorCodes.invalid_token:
showError(err); push('/login');
break;
default:
showError(err);
}
} }
} }
} }
function showError(err) { function showError(err) {
if (err) { if (err) {
let msg; if (err instanceof Error) {
if (err.data) {
const data = err.data;
msg = data ? data.message : err.message;
} else {
msg = err.message;
}
if (msg && msg.length < 256) {
message.error(msg);
} else {
Modal.error({ Modal.error({
title: '服务器内部错误', title: `错误:${err.message}`,
content: <div style={errStyle}>{msg}</div>, content: <div style={errStyle}>{err.stack}</div>,
width: 460, width: 460,
}); });
} else {
let msg;
if (err.data) {
const data = err.data;
msg = data ? data.message : err.message;
} else {
msg = err.message;
}
if (msg && msg.length < 256) {
message.error(msg);
} else {
Modal.error({
title: '服务器内部错误',
content: <div style={errStyle}>{msg}</div>,
width: 460,
});
}
} }
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论