Skip to content

Commit 3974e03

Browse files
committed
error types
1 parent 41772e6 commit 3974e03

File tree

6 files changed

+71
-16
lines changed

6 files changed

+71
-16
lines changed

src/connect.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@ import type { RenderOptions, VueEasyRendererOptionParams } from './type';
33

44
const path = require('path');
55
const rendererFactory = require('./renderer/factory');
6+
const ErrorTypes = require('./error');
67

78
const noop = () => { };
89

910
function vueEasyRenderer(basePath: string, VEROptions?: VueEasyRendererOptionParams) {
10-
const errorHandler = (e) => {
11-
e.name = `VueEasyRenderer: ${e.name}`;
12-
e.type = 'VueEasyRendererError';
11+
const errorHandler = (e: ErrorTypes.BaseError) => {
1312
if (VEROptions && VEROptions.onError) {
1413
VEROptions.onError(e);
1514
} else {
@@ -32,9 +31,11 @@ function vueEasyRenderer(basePath: string, VEROptions?: VueEasyRendererOptionPar
3231
stream.on('data', chunk => res.write(chunk));
3332
stream.on('end', () => res.end());
3433
}).catch((e) => {
35-
e.component = vueFilePath;
36-
errorHandler(e);
37-
next(e);
34+
const error = new ErrorTypes.RenderError(e);
35+
error.component = vueFilePath;
36+
error.state = state;
37+
errorHandler(error);
38+
next(error);
3839
});
3940
};
4041
res.vueRenderToStream = (vueFilePath: string, state?: Object, options?: RenderOptions): Promise<stream$Readable> => {

src/error.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// @flow
2+
3+
/**
4+
* Renderer base error
5+
*
6+
* @class RendererError
7+
* @extends {Error}
8+
*/
9+
class BaseError extends Error {
10+
type: 'VueEasyRendererError';
11+
name: string;
12+
constructor(e: ?Error): void {
13+
super();
14+
this.type = 'VueEasyRendererError';
15+
if (e) {
16+
this.name = `[VueEasyRenderer]Error: ${e.name}`;
17+
this.stack = e.stack;
18+
this.message = e.message;
19+
}
20+
}
21+
}
22+
23+
/**
24+
* render error
25+
*
26+
* @class RenderError
27+
* @extends {RendererError}
28+
*/
29+
class RenderError extends BaseError {
30+
state: ?Object;
31+
component: string;
32+
constructor(e: ?Error): void {
33+
super();
34+
if (e) {
35+
this.name = `[VueEasyRenderer]RenderError: ${e.name}`;
36+
}
37+
}
38+
}
39+
40+
module.exports = {
41+
BaseError,
42+
RenderError,
43+
};

src/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
1+
// @flow
22
process.env.VUE_ENV = 'server';
33

44
const koaRenderer = require('./koa');
55
const connectRenderer = require('./connect');
6+
const ErrorTypes = require('./error');
67

78
module.exports = {
89
koaRenderer,
910
connectRenderer,
11+
ErrorTypes,
1012
};

src/koa.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@ import type { RenderOptions, VueEasyRendererOptionParams } from './type';
33

44
const path = require('path');
55
const rendererFactory = require('./renderer/factory');
6+
const ErrorTypes = require('./error');
67

78
const noop = () => { };
89

910
function vueEasyRenderer(basePath: string, VEROptions?: VueEasyRendererOptionParams) {
10-
const errorHandler = (e) => {
11-
e.name = `VueEasyRenderer: ${e.name}`;
12-
e.type = 'VueEasyRendererError';
11+
const errorHandler = (e: ErrorTypes.BaseError) => {
1312
if (VEROptions && VEROptions.onError) {
1413
VEROptions.onError(e);
1514
} else {
@@ -32,9 +31,11 @@ function vueEasyRenderer(basePath: string, VEROptions?: VueEasyRendererOptionPar
3231
return renderer.renderToStream(filePath, state, renderOptions).then((result) => {
3332
ctx.body = result;
3433
}).catch((e) => {
35-
e.component = vueFilePath;
36-
errorHandler(e);
37-
return Promise.reject(e);
34+
const error = new ErrorTypes.RenderError(e);
35+
error.component = vueFilePath;
36+
error.state = state;
37+
errorHandler(error);
38+
return Promise.reject(error);
3839
});
3940
};
4041
ctx.vueRenderToStream = (vueFilePath: string, state?: Object, options?: RenderOptions): Promise<stream$Readable> => {

src/renderer/renderer.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const vueServerRenderer = require('vue-server-renderer');
1010
const SSRPlugin = require('../plugins/server');
1111
const StreamTransform = require('./transform');
1212
const VueHead = require('./head');
13+
const ErrorTypes = require('../error');
1314

1415
Vue.use(SSRPlugin);
1516
Vue.use(Vuex);
@@ -58,7 +59,10 @@ class Renderer extends EventEmitter implements IRenderer {
5859
this.options.preCompile.push(...needCompiledPlugin);
5960
this.compiler.load(this.options.preCompile).then(() => {
6061
this.emit('ready');
61-
}).catch(e => this.emit('error', e));
62+
}).catch((e) => {
63+
const error = new ErrorTypes.BaseError(e);
64+
this.emit('error', error);
65+
});
6266
}
6367

6468
/**
@@ -143,7 +147,10 @@ class Renderer extends EventEmitter implements IRenderer {
143147
const bodyStream = this.vueRenderer.renderToStream(component);
144148
bodyStream.on('error', (e) => {
145149
e.component = path;
146-
this.emit('error', e);
150+
const error = new ErrorTypes.RenderError(e);
151+
error.component = path;
152+
error.state = state;
153+
this.emit('error', error);
147154
});
148155

149156
if (isPure) return bodyStream;

src/type.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,5 +72,6 @@ export type VueEasyRendererOptionParams = {
7272
outputPath?: string,
7373
global?: Object,
7474
onReady: () => void,
75-
onError: (e: Object) =>void
75+
onError: (e: Object) => void
7676
}
77+

0 commit comments

Comments
 (0)