From 2e2db37ccb8e5addf50e24cabdec940f90cb3077 Mon Sep 17 00:00:00 2001 From: nkzawa Date: Wed, 19 Oct 2016 21:41:45 +0900 Subject: [PATCH] add error page for debug --- client/next.js | 4 +- lib/router.js | 11 +-- package.json | 2 +- pages/_error-debug.js | 68 +++++++++++++++++ .../build/loaders/hot-self-accept-loader.js | 4 +- server/build/webpack.js | 43 ++++++----- server/hot-reloader.js | 51 +++++++++---- server/index.js | 74 ++++++++++++++----- server/render.js | 16 +++- server/resolve.js | 54 +++++++++++--- 10 files changed, 250 insertions(+), 77 deletions(-) create mode 100644 pages/_error-debug.js diff --git a/client/next.js b/client/next.js index 1f0b3e4f4a..52075154f3 100644 --- a/client/next.js +++ b/client/next.js @@ -7,13 +7,13 @@ import DefaultApp from '../lib/app' import evalScript from '../lib/eval-script' const { - __NEXT_DATA__: { app, component, props, classNames } + __NEXT_DATA__: { app, component, props, classNames, err } } = window const App = app ? evalScript(app).default : DefaultApp const Component = evalScript(component).default -export const router = new Router(window.location.href, { Component }) +export const router = new Router(window.location.href, { Component, ctx: { err } }) const headManager = new HeadManager() const container = document.getElementById('__next') diff --git a/lib/router.js b/lib/router.js index 2e85c520bd..d5a325108d 100644 --- a/lib/router.js +++ b/lib/router.js @@ -123,7 +123,10 @@ export default class Router { const xhr = loadComponent(componentUrl, (err, data) => { if (err) return reject(err) - resolve({ ...data, ctx: { xhr } }) + resolve({ + Component: data.Component, + ctx: { xhr, err: data.err } + }) }) }) @@ -189,17 +192,15 @@ function loadComponent (url, fn) { return loadJSON(url, (err, data) => { if (err) return fn(err) - const { component } = data - let module try { - module = evalScript(component) + module = evalScript(data.component) } catch (err) { return fn(err) } const Component = module.default || module - fn(null, { Component }) + fn(null, { Component, err: data.err }) }) } diff --git a/package.json b/package.json index e17cdd4f30..5801e31dec 100644 --- a/package.json +++ b/package.json @@ -40,8 +40,8 @@ "react": "15.3.2", "react-dom": "15.3.2", "react-hot-loader": "3.0.0-beta.6", - "resolve": "1.1.7", "send": "0.14.1", + "strip-ansi": "3.0.1", "url": "0.11.0", "webpack": "1.13.2", "webpack-dev-server": "1.16.2", diff --git a/pages/_error-debug.js b/pages/_error-debug.js new file mode 100644 index 0000000000..2d426f410d --- /dev/null +++ b/pages/_error-debug.js @@ -0,0 +1,68 @@ +import React from 'react' +import stripAnsi from 'strip-ansi' +import Head from 'next/head' +import { css, StyleSheet } from 'next/css' + +export default class ErrorDebug extends React.Component { + static getInitialProps ({ err }) { + const { message, module } = err + return { message, path: module.rawRequest } + } + + render () { + const { message, path } = this.props + + return
+ +